【发布时间】:2016-01-15 08:27:12
【问题描述】:
假设我有一个如下所示的类结构:
public abstract class MyOtherBaseClass
{
public string HelloWorld;
}
public interface MyInterface<T> where T : MyOtherBaseClass
{
T MyObject { get; set; }
}
public abstract class MyBaseClass<T> : MyInterface<T>
where T : MyOtherBaseClass
{
public T MyObject { get; set; }
}
public class MyImplementation : MyBaseClass<MyOtherBaseClass>
{
}
有什么方法可以在MyBaseClass 的任何实现中访问MyObject?我不能使用MyBaseClass 或MyInterface 的变量,因为我必须指定类型约束,但就我而言,我对指定它们不感兴趣,因为我只想访问其中的值。
理想情况下,我希望能够做这样的事情:
MyBaseClass baseObject = null;
if(someCondition)
{
baseObject = new MyImplementation();
}
else if(otherCondition)
{
baseObject = new OtherImplementation(); //this also inherits from MyBaseClass
}
var objectValue = baseObject.MyObject;
var helloWorldValue = objectValue.HelloWorld;
【问题讨论】:
-
this also inherits from MyBaseClass来自MyBaseClass<MyOtherBaseClass>或来自其他具体类型。 -
@HamletHakobyan 对不起,
MyBaseClass<MyOtherBaseClass>。每个实现都可以创建自己的派生类型MyOtherBaseClass并使用它,例如MyBaseClass<MyDerivedOtherBaseClass>
标签: c# generics inheritance interface