为什么派生类不能使用扩展基类的类型重写该接口的接口类型抽象属性?



在下面的代码中,编译器抱怨B没有实现抽象类ATestPropertyITest2是从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>
 {
 ....
 }

最新更新