将Python移植到C#时的方法继承问题

ikk*_*ebr 0 .net c# inheritance

我想将一些Python代码移植到C#.

我目前无法在C#中复制以下Python代码段.

class X:
    a = 'foo'

    def x(self):
        return self.a;

class Y(X):
    a = 'bar'
Run Code Online (Sandbox Code Playgroud)

当我使用我的课程时,我得到了理想的行为:

a = X()
b = Y()

a.x() // prints "foo"
b.x() // prints "bar"
Run Code Online (Sandbox Code Playgroud)

但是在C#中,我得到了不同的结果.

public class X {
    public string a = "foo";
    public virtual string xe(){
        return this.a;
    }
}
public class Y: X{
    new public string a = "bar";
}
Run Code Online (Sandbox Code Playgroud)

当我使用我的课程时,我得到以下结果:

X a = new X();
Y b = new Y();
a.xe(); // "foo"
b.xe(); // "foo"
Run Code Online (Sandbox Code Playgroud)

也许不可能重用具有继承类属性的基类方法?

Tig*_*ran 7

您不需要a在子课程中重新定义

public class X {
    public string a = "foo";
    ...
}
public class Y: X{

     public Y()
     {
        a = "bar"; // USE THE BASE CLASS [a], AND ASSIGN TO IT DESIRED STRING
     }
     ......

}
Run Code Online (Sandbox Code Playgroud)

和更多.正如@ChaosPandition所指出的:C#最佳实践建议不要直接使用公共字段,而是使用属性.并不是说你的代码不起作用,但这并不是C#程序员编写代码的方式.

  • 你可以有一个初始化只读字段的基础构造函数.就个人而言,我不喜欢看到公共可变领域. (3认同)