Schnittstellen, wie definiert durch MSDN "enthalten nur die Signaturen von Methoden, Delegaten oder Ereignissen." Da Eigenschaften jedoch nicht mehr als syntaktischer Zucker für eine Get-and-Set-Methode sind, sind sie auch in Schnittstellen zulässig. Meine Frage ist: Gibt es Situationen, in denen die Definition von Eigenschaften in einer Schnittstelle angemessen ist oder sollten wir uns an die von MSDN beschriebenen Szenarien halten?Sollten Schnittstellen Eigenschaften definieren?
Antwort
Ich denke, Eigenschaften sind in Schnittstellen vollkommen akzeptabel.
Wie Sie sagten, sind sie wirklich eine Methode zum Abrufen, Festlegen oder Abrufen und Festlegen. Viele Schnittstellen im Framework definieren Eigenschaften wie IAsyncResult und IWebProxy.
Der Artikel, den Sie verknüpfen auch heißt:
Eine Schnittstelle Mitglied einer Namespace oder eine Klasse sein kann und Signaturen aus den folgenden Mitgliedern enthalten:
- Methoden
- Eigenschaften
- Indexer
Events
@Simon: Ja, sehe ich jetzt. –
Ja, sollte eine Schnittstelle Eigenschaften definieren, wenn es wirklich in Not sind. Bitte nehmen Sie das an. Es gibt eine IUser-Schnittstelle, die eine Eigenschaft "Name" definiert hat, die Sie dann verwenden können, ohne sich Gedanken darüber machen zu müssen, ob das Objekt die Eigenschaft nicht implementiert hat.
public void main()
{
IUser u = User.GetUser("id");
string name = u.Name;
}
- 1. F # Schnittstellen und Eigenschaften
- 2. Schnittstellen und Eigenschaften
- 3. Anwendungsdesign - Wann sollten Schnittstellen verwendet werden?
- 4. Eigenschaften sollten Arrays nicht zurückgeben
- 5. Wie sollten Kommentare für Schnittstellen- und Klassenmethoden anders sein?
- 6. Delphi Rtti: Eigenschaften von Schnittstellen erforschen?
- 7. Ausschließen Eigenschaften auf Modell Bindung Schnittstellen
- 8. Welchen Typ sollten Struts ActionForm-Eigenschaften haben?
- 9. Clean-Code: Sollten Objekte öffentliche Eigenschaften haben?
- 10. wpf Definieren von benutzerdefinierten Eigenschaften für Stile
- 11. Wie bedingte Eigenschaften in Maven definieren?
- 12. So definieren Sie Beziehungen bei der Verwendung von Schnittstellen
- 13. Klasse Implementieren von zwei Schnittstellen, die die gleiche Methode definieren
- 14. PHP's SPL: Bedecken seine Schnittstellen mit Arrays alle Array-Eigenschaften?
- 15. Stub-Eigenschaften für Schnittstellen in C# automatisch erstellen?
- 16. .NET-Schnittstellen
- 17. Sollten Erweiterungseigenschaften zu C# 4.0 hinzugefügt werden?
- 18. Sollten die Eigenschaften meiner Scala-Darsteller @volatile sein?
- 19. Was sollten die Subversion-Eigenschaften für eine * .xml-Datei sein?
- 20. Umgang mit C# -Eigenschaften, die nicht null sein sollten
- 21. Welche Eigenschaften sollten mit CSSearchableItemAttributeSet auf NSUserActivity verwendet werden?
- 22. C# schreibgeschützte berechnete Eigenschaften, sollten sie Methoden sein?
- 23. Sollten die Eigenschaften meiner Akka-Darsteller @volatile sein?
- 24. Export-Schnittstellen
- 25. AutoFixture und Schnittstellen
- 26. Java Schnittstellen Verzeichnisstruktur?
- 27. Wo sollten Interfaces "physisch leben"?
- 28. Java-Schnittstellen und Rückgabetypen
- 29. Warum automatisch implementiert Eigenschaften müssen beide bekommen definieren und Accessoren
- 30. Schnittstelle als beliebige, aber mit garantierten Eigenschaften definieren?
Vielen Dank, Reed. Sollten diese Eigenschaften in diesem Fall elementare (nicht benutzerdefinierte) Typen sein? Der Grund, warum ich frage, ist, weil Sie, wenn Sie es zum Beispiel als einen Domain-Typ definieren, vielleicht eine zirkuläre Referenz haben. –
@ Otávio Décio: Beachten Sie den Zweck einer Schnittstelle. Eine Schnittstelle definiert einen Vertrag. Wenn eine Immobilie für den Vertrag benötigt wird, ist es in Ordnung. Sie sollten nicht mit zirkulären Referenzen enden, da die Eigenschaften keine Typen sein sollten, die die Schnittstelle direkt implementieren, sondern entweder Basis-, Framework-Typen oder Typen, die selbst Teil des "Vertrags" sind. Ein gutes Beispiel ist IWebProxy (oben verlinkt) - es besitzt eine Credentials-Eigenschaft, die ICredentials enthält. Das ist Teil des Vertrages, aber essentiell ein "benutzerdefinierter" Typ (für die lib). –
Nur um sicher zu gehen - Eigenschaften, die in Schnittstellen definiert sind, sollten entweder nicht benutzerdefinierte konkrete Typen oder Schnittstellentypen sein (benutzerdefiniert oder nicht). –