erben Betrachten Sie den folgenden Code ein:Schnittstelle Vererbung in C#: Eigenschaft nicht get-Accessor
public interface IFoo
{
int Bar { get; }
}
public interface IModifiableFoo : IFoo
{
int Bar { set; }
}
public class FooImpl : IModifiableFoo
{
public int Bar { get; set; }
}
static void Main()
{
IModifiableFoo f = new FooImpl();
int bar = f.Bar; // Compiler error
}
Dies ist die Fehlermeldung:
Fehler CS0154: Die Eigenschaft oder Indexer ‚MyNamespace.IModifiableFoo. Bar‘kann in diesem Zusammenhang nicht verwendet werden, da es den get-Accessor
fehlt
Seit IModifiableFoo
inherits IFoo
, die 012.Accessor (d.h. get_Bar()
Methode) sollte zugänglich sein. Was geht hier vor sich?
Hinweis: Dies unterscheidet sich von der Frage Adding setter to inherited read-only property in C# interface, da diese Frage Compilerfehler beim Aufrufen von Getter über beschreibbare Schnittstelle nicht adressiert.
Sie bekommen haben sollte [a Compiler-Warnung] (https://msdn.microsoft.com/en-us/library/3s8070fc.aspx), wenn Sie das getan hat, es ist ein Hinweis darauf, was falsch läuft. Außerdem ist die Frage, mit der Sie verbunden sind, immer noch das gleiche Problem, sie haben den nächsten Schritt nicht gemacht, die Warnung zu ignorieren und zu versuchen, die Eigenschaft trotzdem zu verwenden. EDIT: Eigentlich, es genauer zu lesen, ist es nicht das gleiche Problem, weil sie 'Get verwenden; set; t' in der abgeleiteten Schnittstelle, aber Sie verwenden nur 'set;' –
Vielleicht liegt es daran, dass Ihr zweiter Balken den ersten Schatten wirft? Was passiert, wenn Sie speziell auf IFoo umstellen? – Neolisk
Visual Studio 2012 gibt mir die Warnung "'Test.IFodiableFoo.Bar' verbirgt das geerbte Mitglied 'Test.IFoo.Bar'. Verwenden Sie das neue Schlüsselwort, wenn das Verstecken beabsichtigt war." Das sieht sicher genauso aus wie in der Frage, die Sie verlinkt haben. –