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)
也许不可能重用具有继承类属性的基类方法?
您不需要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#程序员编写代码的方式.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |