B 类继承自 A 类, β类继承自α类. 同时α作为 A 类的字段, β作为 B 类的字段. 现希望 B 实例调用父类方法(该父类方法调用了字段α)时, 能使用自身环境中的β实例而非α实例(因为α对 B 没有意义, 虽然从父类继承, 但完全不使用, 只使用β)
于是考虑将字段α设为 virtual:
public class Alpha
{
public virtual void printSelf()
{
print("this is alpha");
}
}
public class Beta: Alpha
{
public override void printSelf()
{
print("this is beta");
}
}
public class A
{
public virtual Alpha alpha
{
get => _alpha;
set => _alpha = value;
}
private Alpha _alpha
public virtual void PrintSelf()
{
alpha.printSelf();
}
}
public class B: A
{
public override Alpha alpha
{
get => _beta;
set{}
}
// public?
private Beta _beta;
}
public class Main
{
var b = new B();
b.PrintSelf();
}
请问这样设计合理吗? 另外, 为了访问β实例中的非继承字段, B 类中的β字段必须设为 public, 这样会带来额外的问题吗?
还是说这种需求就是不合理? 已经有点绕晕了现在. 这种"嵌套的继承关系"有没有专业点的称呼?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.