なぜ、それ以下では有効な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': cannot override because 'InterfaceAbstractTest.SomeAbstractClass.SomeProperty' does not have an overridable set accessor InterfaceAbstractTest
前者を許していない理由は何ですか?
私は彼らがここでは「オーバーライド」と言います。オーバーライドする設定方法はありません。 –
または、オーバーライドキーワードがアクセサレベルではなくプロパティレベルで指定されていますか?結局のところ、各アクセサは、それになると別個のメソッドです。 –
右 - 抽象キーワードは、アクセサレベルではなくプロパティレベルで機能します。 –