【发布时间】:2012-03-11 00:32:03
【问题描述】:
为什么下面的 C# 是合法的:
public interface ISomeInterface
{
int SomeProperty
{
get;
}
}
public class SomeClassImplementingInterface : ISomeInterface
{
public int SomeProperty
{
get { return 32; }
protected set {}
}
}
但这不是:
public abstract class SomeAbstractClass
{
public abstract int SomeProperty
{
get;
}
}
public class SomeClassExtendingAbstractClass : SomeAbstractClass
{
public override int SomeProperty
{
get { return 32; }
protected set {}
}
}
后者导致以下编译时错误:
'InterfaceAbstractTest.SomeClassExtendingAbstractClass.SomeProperty.set': 无法覆盖,因为 'InterfaceAbstractTest.SomeAbstractClass.SomeProperty' 没有 一个可覆盖的集合访问器 InterfaceAbstractTest
允许前者却不允许后者的原因是什么?
【问题讨论】:
-
我认为这里的关键词是“覆盖”。没有设置方法可以覆盖。
-
还是说override关键字是在属性级别而不是访问器级别指定的?毕竟,归根结底,每个访问器都是不同的方法。
-
对 - 抽象关键字在属性级别起作用,而不是访问器级别。
标签: c# .net interface abstract-class