C# 将数据传递给C中重写的基方法#
这是一个有点愚蠢的问题,但我想知道在c#中,将数据从返回到重写的基方法的公认方式是什么 e、 g.我想我可以做到: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(); }
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)