我对不同的继承/抽象交互感到困惑。
假设我有一个名为BaseClass
的类,现在在这个基类上我有多个继承的派生类,InherritedBaseClassA
等。
class BaseClass
{
int SomeGenericProperties {get; set;}
}
class InherritedBaseClassA : BaseClass
{
int PropertyOnlyInA {get; set;}
}
class InherritedBaseClassB : BaseClass
{
int PropertyOnlyInB {get; set;}
}
现在我想将此BaseClass
作为属性添加到abstract
类中:
abstract class AbstractBase
{
public abstract Baseclass MyProperty {get;set;}
}
最后,我想在我的abstract
课程的实施中,用BaseClass
课程覆盖这个Derived
。
class Implementation_A_OfAbstractBase : AbstractBase
{
// how do i write this line?
public override InherritedBaseClassA MyProperty;
}
我想这样做,因为我的代码中的其他地方有AbstractBase
的通用列表,有时我想访问存在的AbstractBase.MyProperty.SomeGenericProperties
,无论我使用什么类型的继承基类实现,因为它们{ {1}}继承自MyProperty
答案 0 :(得分:1)
您将需要使用C#Generics来解决此问题。
快速实施如下:
abstract class AbstractBase<T> where T: Baseclass
{
public abstract T MyProperty { get; set;}
}
class Implementation_A_OfAbstractBase : AbstractBase<InherritedBaseClassA>
{
//you no longer need to override the property, the generic type takes care of this for you.
}
重要的是要注意where T: Baseclass
这将告诉编译器指定的类型将始终继承Baseclass
,如果您尝试使用不支持的类型,编译实际上将失败。 / p>
答案 1 :(得分:0)
你需要使用泛型。
例如:
abstract class AbstractBase<T>
where T : BaseClass
{
public abstract T MyProperty { get; set; }
}
abstract class AbstractBase : AbstractBase<BaseClass>
{
}
class Implementation_A_OfAbstractBase : AbstractBase<InherritedBaseClassA>
{
public override InherritedBaseClassA MyProperty { get; set; }
}