以下是错误的代码。请帮助我实现我想要实现的目标,但具有良好的代码。 我想要一个从基础派生的对象数组。我想在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();
}
}
答案 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();
}
}
它必须与基础对象具有相同的名称。