为什么派生 class 不能使用扩展该接口的类型覆盖基 class' 接口类型抽象 属性?
Why can't a derived class override base class' interface type abstract property with a type that extends that interface?
在下面的代码中,编译器抱怨 B 没有实现抽象 class 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();
但是 Test3
没有按照 B
的要求实施 ITest2
。
使 A class 通用
Public abstract class A<TTest>
Where TTest : ITest1
{
Public abstract TTest TestProperty {get; set;}
}
Public class B : A<ITest2>
{
....
}
在下面的代码中,编译器抱怨 B 没有实现抽象 class 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();
但是 Test3
没有按照 B
的要求实施 ITest2
。
使 A class 通用
Public abstract class A<TTest>
Where TTest : ITest1
{
Public abstract TTest TestProperty {get; set;}
}
Public class B : A<ITest2>
{
....
}