[英]C# Access base class variables/functions from abstract class
也許這是不可能的,或者我正在混淆一些東西,但它打破了我的頭。
假設我們有一個抽象類 A 和一個基於 A 的類 B。 A 是否可以從 B 訪問變量/函數?
例子:
abstract class A
{
public bool activeA = false;
public bool getState()
{
return test; // The variable from class B
}
}
class B : A
{
public bool test = true;
public void isActive()
{
return base.getState(); // So this should return true because getState() should access the variable test^^
}
}
不,這是不可能的。 A
對B
或潛在的C..Z
。
如果test
在A
,那么A
和B
都可以訪問它。 或者您可以創建一個由B
實現的接口,並且A
知道並將B
作為參數傳遞給A
。
這可能是這樣的:
interface IB
{
bool Test { get; }
}
abstract class A
{
public bool activeA = false;
public bool getState(IB arg)
{
return arg.Test;
}
}
class B : A, IB
{
public bool Test => true;
public bool isActive()
{
return base.getState(this);
}
}
不,那不可能。 抽象類對從它繼承的類一無所知,因此它不能使用它們的屬性。
這是不可能的,因為 A 類不知道 B 存在。
正如已經提到的:通常不可能從 A 類訪問 B 類的現場測試。
但是你可以將你的方法 getState() 聲明為抽象的:
abstract class A
{
public abstract bool getState();
void AccessState()
{
Console.WriteLine("state: {0}", getState());
}
}
從 A 派生的所有類都必須實現 getState 方法(或者本身是抽象的):
class B : A
{
bool test = true;
public override bool getState()
{
return test;
}
}
通過這種方式,您可以強制類 A 的所有非抽象繼承者提供所有抽象方法和屬性的實現。 您定義了一個 A 類可以依賴的契約。 這樣就可以在A類中調用getState(),間接從B類中獲取現場測試的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.