无法覆盖基本属性

时间:2011-01-31 19:19:39

标签: c#

以下是错误的代码。请帮助我实现我想要实现的目标,但具有良好的代码。 我想要一个从基础派生的对象数组。我想在DoStuff()运行时能够在BaseClass中使用该数组。我知道我不能贬低,这不是我想要做的。我只想在派生类中设置Fields,并在基础DoStuff()中使用Fields。

public class BaseObject
{

}

public class DerivedObject : BaseObject
{

}

public class BaseClass
{
    public BaseObject[] Objects;

    public virtual void DoStuff()
    {
        // use the Objects
    }
}

public class DerivedClass : BaseClass
{
    public override DerivedObject[] Objects;

    public override void DoStuff()
    {
        // Do stuff unique to the derived.

        base.DoStuff();
    }
}

2 个答案:

答案 0 :(得分:9)

您正在寻找仿制品吗?

public class BaseClass<T>
where T : BaseObject
{
    public T[] Objects;

    public virtual void DoStuff()
    {
        // use the Objects
    }
}

public class DerivedClass : BaseClass<DerivedObject>
{
    public override void DoStuff()
    {
        // Do stuff unique to the derived.

        base.DoStuff();
    }
}

在声明T类型(通用或参数类型)的上述代码字段中,T被约束为BaseObject或类继承自BaseObject,{声明{1}}已指定DerivedClass代替T,因此DerivedObject DerivedClass字段可用作Objects

答案 1 :(得分:0)

您正确定义了属性,它应该看起来像

public class BaseClass
{
    public virtual BaseObject[] Objects {get; set;}

    public virtual void DoStuff()
    {
        // use the Objects
    }
}

然后你应该能够将其覆盖为

public class DerivedClass : BaseClass
{
    public override BaseObject[] Objects {get; set;}

    public override void DoStuff()
    {
        // Do stuff unique to the derived.

        base.DoStuff();
    }
}

它必须与基础对象具有相同的名称。