C# 将数据传递给C中重写的基方法#

C# 将数据传递给C中重写的基方法#,c#,C#,这是一个有点愚蠢的问题,但我想知道在c#中,将数据从返回到重写的基方法的公认方式是什么 e、 g.我想我可以做到: class A { int x; public virtual void DoStuff() { Console.WriteLine(x); } } class B : A { public override void DoStuff() { x = 1; base.DoStuff(); }

这是一个有点愚蠢的问题,但我想知道在c#中,将数据从返回到重写的基方法的公认方式是什么

e、 g.我想我可以做到:

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(int x) {
        Console.WriteLine(x);
    }
}

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

一种解决方案可能涉及使用一个受保护的方法,该方法有一个参数来重用来自基类的代码

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);
    }
}
怎么样

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

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

您可以使用类似设计模式的东西:

class A
{

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

    protected abstract int DoGetX();
}

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

对于几乎每个开发者来说,属性看起来都像是字段的简单包装器,我们知道并没有像虚拟字段这样的东西。因此,我认为在这种情况下,抽象方法是更可取的解决方案(我们已经讨论了属性和方法之间的差异)。

我很确定我不理解这个问题,但是您是否考虑过在基类中添加一个采用参数的方法呢?谢谢您的回答-非常有趣:)我不想向B的使用者公开(intx)