簡體   English   中英

C#從抽象類訪問基類變量/函數

[英]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^^
    }

 }

不,這是不可能的。 AB或潛在的C..Z

如果testA ,那么AB都可以訪問它。 或者您可以創建一個由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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM