簡體   English   中英

在C#中將數據傳遞給重寫的基本方法

[英]Passing data to overridden base method in C#

有點愚蠢的問題,但我想知道將數據從返回到重寫的基本方法的可接受方式是在c#中。

我想我能做到:

class A
{
    int x;
    public virtual void DoStuff() {
        Console.WriteLine(x);
    }
}

class B : A
{
    public override void DoStuff() {
        x = 1;
        base.DoStuff();
    }
}

但是有沒有更好的方法,例如不需要使用成員變量?

一種解決方案可能涉及使用受保護的方法,該方法具有重用來自基類的代碼的參數。

class A
{
    public virtual void DoStuff() {
        DoStuffInternal(0);
    }
    protected void DoStuffInternal(int x) {
        Console.WriteLine(x);
    }
}

class B : A
{
    public override void DoStuff() {
        DoStuffInternal(1);
    }
}

為什么不使用參數?

class A
{
    public virtual void DoStuff(int x) {
        Console.WriteLine(x);
    }
}

class B : A
{
    public override void DoStuff(int x) {
        //do stuff
        int y = 1
        base.DoStuff(y);
    }
}

怎么樣

abstract class A
{
    protected abstract int X { get; }
    public void DoStuff() {
        Console.WriteLine(X);
    }
}

class B : A
{
    protected override int X { get { return 1; } }
}

你可以使用像Template Method設計模式這樣的東西:

class A
{

    public void DoStuff() {
        var x = DoGetX();
        Console.WriteLine(x);
    }

    protected abstract int DoGetX();
}

class B : A
{
    protected override int DoGetX() {
      return 1;
    }
}

對於幾乎每個開發人員屬性看起來像字段的簡單包裝,我們知道沒有像虛擬字段這樣的東西。 所以我認為,抽象方法是更在這種情況下,最好的解決方案(我們已經討論過的屬性和方法之間的差異在這里 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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