Le interfacce, come definito da MSDN "contengono solo le firme di metodi, delegati o eventi." Tuttavia, poiché le proprietà non sono altro che zucchero sintattico per un metodo get e set, sono ammesse anche nelle interfacce. La mia domanda è: c'è qualche situazione in cui la definizione delle proprietà in un'interfaccia è appropriata o dovremmo attenerci agli scenari descritti da MSDN?Le interfacce devono definire le proprietà?
risposta
Penso che le proprietà siano perfettamente accettabili nelle interfacce.
Come hai detto, sono davvero un metodo get, set o get e set. Molte interfacce nel Framework definiscono proprietà, come IAsyncResult e IWebProxy.
L'articolo si collega a afferma anche:
Un'interfaccia può essere un membro di un namespace o di una classe e possono contenere firme dei seguenti membri:
- Metodi
- Proprietà
- Indicatori
- Eventi
@Simon: sì, ora vedo. –
Sì, Un'interfaccia dovrebbe definire le proprietà quando veramente bisogno. Supponiamo che C'è un'interfaccia IUser che ha definito una proprietà "Nome", quindi puoi usarla senza preoccuparti se l'oggetto non ha implementato la proprietà.
public void main()
{
IUser u = User.GetUser("id");
string name = u.Name;
}
- 1. Le interfacce PHP hanno proprietà?
- 2. Le librerie Android devono definire targetSdkVersion?
- 3. Come definire le relazioni quando si utilizzano le interfacce
- 4. Devo definire le interfacce nelle lingue Duck Typed?
- 5. Le proprietà iniettate devono essere smaltite?
- 6. Delphi Rtti: esplora le proprietà delle interfacce?
- 7. Come definire le proprietà condizionali in Maven?
- 8. FAKE: come definire le proprietà MSBuild?
- 9. Come definire le interfacce in C++/CLI gestito
- 10. Perché le proprietà non sono dichiarabili nelle interfacce
- 11. interfacce API non devono estendere altre interfacce Retrofit 2
- 12. Come distinguere le interfacce "Role" dalle interfacce "Result"?
- 13. Come definire e implementare le proprietà nel protocollo
- 14. Dove definire le enumerazioni
- 15. Perché stiamo implementando le interfacce?
- 16. Quando sono necessarie le interfacce?
- 17. Parametri facoltativi per le interfacce
- 18. Java ha inventato le interfacce?
- 19. Come organizzare le interfacce TypeScript
- 20. Quando utilizzare le interfacce in Dart?
- 21. Perché implementiamo le interfacce in modo ricorsivo?
- 22. Le entità di dominio devono essere esposte come interfacce o come oggetti semplici?
- 23. Python definire le funzioni dinamiche
- 24. Definire le funzioni nelle strutture
- 25. Interfacce e proprietà F #
- 26. Interfacce e proprietà
- 27. Le classi interne statiche devono essere importate per le annotazioni
- 28. Perché è preferibile utilizzare le interfacce anziché le classi astratte?
- 29. Le annotazioni possono sostituire totalmente le interfacce marcatore?
- 30. C'è un modo per definire le funzioni di conversione alternative (da/verso le interfacce) in una classe surrogata protobuf-net
Grazie, Reed. In questo caso, queste proprietà dovrebbero essere di tipi elementari (non definiti dall'utente)? Il motivo per cui lo chiedo è perché se per esempio lo definisci come un tipo di dominio, potresti finire con un riferimento circolare. –
@ Otávio Décio: Tieni presente lo scopo di un'interfaccia. Un'interfaccia definisce un contratto. Se una proprietà è richiesta per il contratto, allora va bene. Non dovresti finire con riferimenti circolari, dal momento che le proprietà non dovrebbero essere tipi che implementano direttamente l'interfaccia, ma piuttosto i tipi di base, i tipi di framework oi tipi che, loro stessi, fanno parte del "contratto". IWebProxy (collegato sopra) è un buon esempio: ha una proprietà Credentials, che è di ICredentials. Questo è parte del contratto, ma è essenziale un tipo "definito dall'utente" ancora (per quella lib). –
solo per essere sicuri - le proprietà definite nelle interfacce dovrebbero essere tipi concreti non definiti dall'utente o tipi di interfaccia (definiti dall'utente o meno). –