【发布时间】:2014-04-10 15:57:48
【问题描述】:
这是一个与泛型相关的类层次问题。我有一个主要派生类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.");
}
}
【问题讨论】:
-
我认为当它们本质上不同时,您不能将一种类型的对象转换为另一种类型;您可能必须创建一个单独的实例 - 尽管我的知识有限。
-
你到底想做什么?为什么一个类要尝试验证完全不同的其他类型的属性?
-
我以VerifyMyProperty方法为例进行介绍。目的是检查 MyProperty 的 null 状态并显示一条消息。 VerifyMyProperty 所在的类位于框架方法中,我没有太多控制权来更改它。