【发布时间】:2014-11-26 16:33:59
【问题描述】:
我的类层次结构如下:
[DataContract]
[Serializable]
[KnownType(typeof(ChildClass2<>))]
public abstract class BaseClass
{
protected BaseClass(string property1)
{
this.Property1 = property1;
}
[DataMember]
public string Property1 { get; private set; }
public abstract bool Method1(string inputValue);
}
[DataContract]
[Serializable]
public abstract class ChildClass1<T> : BaseClass
{
protected ChildClass1(string property1, T property2) : base(property1)
{
this.Property2 = property2;
}
[DataMember]
public T Property2 { get; private set; }
}
[DataContract]
[Serializable]
public class ChildClass2<T> : ChildClass1<T>
{
public ChildClass2(string proprty1, T property2)
: base(property1, property2)
{
}
public override bool Method1(string inputValue)
{
// Some processing....
}
}
现在我将 ChildClass2 实例化为 baseClass 类型,如下所示:
BaseClass baseClass = ChildClass2<string>("test1", "test2");
如何将 baseClass 转换为 ChildClass2 类型以便访问 baseClass.Property2?
我尝试了类似 (ChildClass2)baseClass.Property2 的方法不起作用。
【问题讨论】:
-
BaseClass baseClass = ChildClass2("test1", "test2");无法编译,因为您没有为 T 提供类型。 -
我认为它基于参数类型,但是在问题中修复了它。
标签: c# generics inheritance casting