在下面的代码中,编译器抱怨B没有实现抽象类A
的TestProperty
。ITest2
是从ITest1
派生而来的,因此它实现了ITest1
所具有的一切。为什么这不可能?
public interface ITest1 { }
public interface ITest2 : ITest1 { }
public abstract class A
{
public abstract ITest1 TestProperty { get; set; }
}
public class B:A
{
public override ITest2 TestProperty { get; set; }
}
这是不安全的,因为你可以这样做:
interface ITest3 : ITest1 { }
public class Test3 : ITest3 { }
A b = new B();
b.TestProperty = new Test3();
但是CCD_ 6没有按照CCD_ 8的要求实现CCD_。
使A类成为通用
Public abstract class A<TTest>
Where TTest : ITest1
{
Public abstract TTest TestProperty {get; set;}
}
Public class B : A<ITest2>
{
....
}