2010-09-20 13 views
8

come ho letto qui http://msdn.microsoft.com/en-us/library/75e8y5dd%28v=VS.100%29.aspxclasse Interfaccia con getter e setter in C#

E 'possibile mettere entrare in una classe di interfaccia MA NON impostato?

Quindi se voglio getter e setter in Interface devo creare la vecchia sintassi getVar setVar solo perché la nuova sintassi non si adatta alla sintassi della classe di interfaccia?

Aggiornamento: Se devo omettere l'impostazione nella classe di interfaccia, vuol dire che non posso imporre alla classe di avere setter che sconfigge lo scopo di avere una classe di interfaccia in questo caso come posso solo parzialmente applicare?

risposta

22

No. Penso che tu abbia frainteso. Questo articolo riguarda la possibilità di disporre di un'interfaccia con una proprietà readonly (una proprietà con solo getter). Ma, se necessario, puoi inserire anche il setter nell'interfaccia:

interface IHasProperty 
{ 
    string Property{ get;set; } 
} 
class HasProperty:IHasProperty 
{ 
    public string Property{ get;set; } 
} 
+2

+1 ti sembra di essere l'unico finora risposto alla domanda Grok del PO. –

3

Se desideri solo get a disposizione basta usare {get;private set;}

http://msdn.microsoft.com/en-us/library/bb384054.aspx

La classe che viene mostrato nell'esempio precedente è mutevole. Il codice cliente può modificare i valori negli oggetti dopo che sono stati creati. Nelle classi complesse che contengono comportamenti (metodi) significativi e dati, è spesso necessario avere proprietà pubbliche. Tuttavia, per le classi piccole o le strutture che incapsulano solo un insieme di valori (dati) e hanno comportamenti piccoli o nulli, si consiglia di rendere gli oggetti immutabili dichiarando il set accessor come privato. Per ulteriori informazioni, vedere Procedura: implementare una classe leggera con proprietà di implementazione automatica (Guida di programmazione C#).

Gli attributi sono consentiti su proprietà auto-implementate ma ovviamente non sui campi di supporto poiché non sono accessibili dal codice sorgente. Se è necessario utilizzare un attributo nel campo di supporto di una proprietà, è sufficiente creare una proprietà regolare.

6

Sì, basta omettere dalla dichiarazione di proprietà. Ad esempio:

interface IName 
{ 
    string Name { get; } 
} 
+0

Penso user310291 sta chiedendo se è possibile mettere un setter in un'interfaccia, se non è possibile ometterlo –

+0

Andrea ha ragione: se devo omettere impostato in classe Interface, fa questo significa che non posso imporre classe avere setter che sconfigge lo scopo di avere una classe interfaccia in questo caso posso solo parzialmente rispettare? – user310291

+0

@ user310291: guardare il codice nella mia risposta: è assolutamente possibile mettere un getter in un'interfaccia. –

5

La risposta infatti è miscela delle risposte precedenti: omettendo setter sull'interfaccia e avendo get; private set; sulla classe.

10

È possibile utilizzare la sintassi delle proprietà. Utilizzare questa combinazione:

interface ISomething 
{ 
    string Test { get; } 
} 

class Something : ISomething 
{ 
    public string Test { get; private set; } 
} 

Ovviamente si può aggiungere implementazioni complete per i getter a Something.Test, se si sceglie di. Ho usato solo i campi di supporto per brevità.

Ricordare che un'interfaccia definisce l'insieme minimo di cose che è necessario implementare. Puoi aggiungere qualsiasi tipo di salsa (nuovi metodi, accessor, membri, ecc.) Che desideri. Si potrebbe anche aggiungere un setter pubblico:

interface ISomething 
{ 
    string Test { get; } 
} 

class Something : ISomething 
{ 
    public string Test { get; set; } // Note that set is public 
} 

L'unica restrizione è che qualcuno non può utilizzare il sugo si aggiunge, a meno che non hanno un riferimento di tipo concreto (la classe, non l'interfaccia), o un interfaccia diversa che definisce i metodi che hai aggiunto.

+0

Grazie mille. Avrei dato una buona risposta anche a te, ma posso sceglierne solo una, quindi ho scelto la prima che ho visto. – user310291

+0

@ user310291: che avete trovato l'uso della mia risposta è abbastanza per me :) –

2

Hai frainteso. Secondo l'articolo, non è possibile utilizzare modificatori di accesso sull'interfaccia.

è possibile utilizzare sia ottenere e impostare in proprietà di interfaccia!

Vedi nel seguente esempio MSDN:

http://msdn.microsoft.com/en-us/library/87d83y5b(v=VS.100).aspx

+0

grazie per il riferimento a questo utile articolo. – user310291

+0

@ user310291 il benvenuto! – Tor