【发布时间】:2012-12-08 10:08:53
【问题描述】:
在基类中访问子类属性的最佳方式是什么。似乎如果我使用继承,我只需要依赖方法而不是属性[因为单独的类存在单独的属性集]。是否有任何推荐的安全方式从基类访问子类属性。或者这是重构代码的任何首选方式,以便我可以通过基类访问子类成员。我知道虚函数的使用,但我不知道如何使用它来设置子类成员变量的值。
class Abc
{
public int Abc_1 {get;set;}
private int _abc;
virtual int DoCalculationonAbc(int a)
{
return abc_1 * a;
}
virtual void SetValueToPrivate(int a)
{
_abc = a;
}
}
class Def:Abc
{
private int _def;
private int _def2;
public int Def_2{get;set;} // what is the preferred way to set values this property
override public void SetValueToPrivate(int a)
{
_def = a;
//_def2 = ??
}
}
Main()
{
Abc ab = new Def();
}
【问题讨论】:
-
如果你能给出一个具体的例子,那真的很有帮助。
-
你必须依赖方法的原因是你的基类永远不知道子类有什么属性。而且您的基类不知道它是从哪里继承的。如果该属性已在基类中声明,您仍然无法访问子类副本,因为您不知道您的子类是否已覆盖它。
-
@JonSkeet 添加了代码。谢谢。
-
在你的例子中,这取决于你想用 _def2 做什么,因为这是在 Def 类中新声明的。您的属性访问器 Def_2 是将值设置为 _def2 的首选方式;
-
@ryadavilli 但 Def_2 无法使用 Abc 实例访问。
标签: c# oop inheritance polymorphism