这是:
abstract class IA
{
public virtual void ChangePropertyOfAIChild()
{
b.value = true;
}
}
...
class B:IA
{
bool value;
}
class C:IA
{
bool value;
}
....
///main
IA newBInstance = new B();
newBInstance.ChangePropertyOfAIChild();
IA newCInstance = new C();
newCInstance .ChangePropertyOfAIChild();
/////
从基础抽象类中调用已经实现的函数并更改它的值是什么? 谢谢!
答案 0 :(得分:1)
正如@Camilo Terevinto所指出的那样,你说heirarchy是错误的。尝试:
public abstract class IA
{
public bool value;
public virtual void ChangePropertyOfAIChild()
{
value = true;
}
}
public class B : IA
{ }
public class C : IA
{ }
// in main
IA newBInstance = new B();
newBInstance.ChangePropertyOfAIChild();
IA newCInstance = new C();
newCInstance.ChangePropertyOfAIChild();
///
您的示例代码的基本抽象类试图更改其不知道的类中字段的值:
(b.value = true)
要使基类能够执行此操作,需要在基类内声明该字段。
答案 1 :(得分:1)
我相信你的继承权非常合适。
如果这是你的类实现:
public abstract class IA
{
}
public class B : IA
{
public bool value;
}
public class C : IA
{
public bool value;
}
然后,如果您像这样创建IA
的实例:
IA newBInstance = new B();
然后编译器继续创建IA
的实例。由于您的IA
没有名为value
的属性,因此您无法访问它。
您有两种选择,要么使用上一回复中CodexNZ建议的方法,要么只是将newInstance
投射到B
并直接设置value
。像这样:
IA newBInstance = new B();
((B)newBInstance).value = true;
然而,这是违反直觉的,因为如果你能做到这一点,你也可以在第一时间创建B
的实例。所以我推荐以前的方法。这更像是为了解释为什么你的逻辑无法正常工作。
请参阅教程like this了解详情。互联网上有更多的资源。