这是一个与泛型相关的类层次结构问题。我有一个主要派生的类MyClass3<T>,它是从MyClass2<T>派生的。类MyClass2<T>有一个名为MyProperty的属性。
我有一个方法VerifyMyProperty,它接受MyClass3类型的对象。因为它是通用的,所以它可以是MyClass3<A> or MyClass3<B> or MyClass3<C>。
我的问题是,如何将MyClass3转换为MyClass2来检查属性MyProperty?没有泛型,就像var myClass2 = anyofMyClass as MyClass2一样简单。对于泛型,T可以是A,B或C,我怎么能做同样的铸造呢?
public class MyClass3<T> : MyClass2<T>
{
....
}
public class MyClass2<T> : MyClass1
{
T MyProperty { get; private set; }
}
public void VerifyMyProperty(object anyofMyClass)
{
var myClass2 = anyofMyClass as MyClass2; // Finding the MyClass2. This line will return a compiler error.
if (myClass2.MyProperty != null)
{
Console.Writeline("MyClass2.MYProperty is not null.");
}
}发布于 2014-04-10 16:05:56
首先:在您的示例中,MyClass2不存在。只有MyClass<T>是一个有效的类。
所以你可以考虑:
var myClass2 = anyofMyClass as MyClass2<T>;
如果anyOfMyClass必须能够包含另一个泛型类型的MyClass2,则会出现问题。
您可能需要考虑一个具有以下属性的通用通用接口的实现:
interface IMyInterface
{
object MyProperty { get; }
}
public class MyClass2<T> : MyClass1, IMyInterface
{
T MyProperty { get; private set; }
object IMyInterface.MyProperty { get { return MyProperty; }}
}当您显式地实现这个接口时(请参阅:http://msdn.microsoft.com/en-us/library/aa664591(v=vs.71).aspx ),您可以以非一般的方式解决您的问题:
var myClass2 = anyofMyClass as IMyInterface;
if (myClass2.MyProperty != null)
...https://stackoverflow.com/questions/22993094
复制相似问题