C#函数继承 - 使用具有基类函数的子类Vars

时间:2011-11-30 01:48:26

标签: windows inheritance c#-4.0

美好的一天,我对经验丰富的C#程序员提出了一个相当简单的问题。基本上,我想有一个抽象的基类,它包含一个依赖于子类值的函数。我尝试过类似下面的代码,但是当SomeFunction()尝试使用它时,编译器会抱怨SomeVariable为null。

基类:

public abstract class BaseClass
{
    protected virtual SomeType SomeVariable;

    public BaseClass()
    {
         this.SomeFunction();
    }

    protected void SomeFunction()
    {
         //DO SOMETHING WITH SomeVariable
    }
}

儿童班:

public class ChildClass:BaseClass
{
    protected override SomeType SomeVariable=SomeValue;
}

现在我希望我这样做:

ChildClass CC=new ChildClass();

应该创建一个新的ChildClass实例,CC将使用SomeValue运行其继承的SomeFunction。然而,这不是发生的事情。编译器抱怨在BaseClass中SomeVariable为null。我想在C#中做什么甚至可能?我使用过其他托管语言,可以让我做这些事情,所以我确定我只是在这里犯了一个简单的错误。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

你得到的几乎是正确的,但你需要使用属性而不是变量:

public abstract class BaseClass {
    protected SomeType SomeProperty {get; set}
    public BaseClass() {
         // You cannot call this.SomeFunction() here: the property is not initialized yet
    }
    protected void SomeFunction() {
        //DO SOMETHING WITH SomeProperty
    }
}
public class ChildClass:BaseClass {
    public ChildClass() {
        SomeProperty=SomeValue;
    }
}

您不能在构造函数中使用FomeFunction,因为SomeProperty尚未由派生类初始化。但是在构造函数之外它很好。通常,访问构造函数中的虚拟成员应被视为可疑。

如果必须将派生类中的值传递给基类构造函数,最好通过受保护构造函数的参数显式执行。