Dlaczego jest to, że po to legalne C#:Dodawanie akcesor interfejs nieruchomość dozwolone, ale nie do abstrakcyjnej własności
public interface ISomeInterface
{
int SomeProperty
{
get;
}
}
public class SomeClassImplementingInterface : ISomeInterface
{
public int SomeProperty
{
get { return 32; }
protected set {}
}
}
ale to nie jest:
public abstract class SomeAbstractClass
{
public abstract int SomeProperty
{
get;
}
}
public class SomeClassExtendingAbstractClass : SomeAbstractClass
{
public override int SomeProperty
{
get { return 32; }
protected set {}
}
}
Te ostatnie wyniki w następujących błąd kompilacji:
'InterfaceAbstractTest.SomeClassExtendingAbstractClass.SomeProperty.set': cannot override because 'InterfaceAbstractTest.SomeAbstractClass.SomeProperty' does not have an overridable set accessor InterfaceAbstractTest
Jaki jest powód, dla którego nie wolno zabronić drugiej z nich przy jednoczesnym umożliwieniu tego pierwszego?
Myślę, że tutaj słowo "kay" to "przesłonięcie". Nie ma ustalonej metody do przesłonięcia. –
A może to, że słowo kluczowe "override" jest określone na poziomie właściwości, a nie na poziomie akcesora? W końcu każdy akcesor jest odrębną metodą, jeśli chodzi o to. –
W prawo - słowo kluczowe abstrakcyjne działa na poziomie właściwości, a nie na poziomie akcesora. –