Domanda

Perché non riesco a specificare un tipo statico di metodi nell'interfaccia.

C'è qualche alternativa per farlo ??

ma dovrei usare solo l'istinto di classe astratta.

/

C'è qualche problema nello specificare lo specificatore di accesso nell'interfaccia?

Voglio specificare gli eventi in Interface e che dovrebbero essere gestiti solo dalla classe implementata, quindi voglio un identificatore di accesso protetto a quell'evento.

e ho una certa funzione che può essere utilizzata dall'interfaccia in un'altra classe in quel caso posso usare lo specificatore di accesso pubblico.

È stato utile?

Soluzione

Non so in che lingua stai parlando, ma risponderò come in C #.

Perché non riesco a specificare il tipo statico di metodi nell'interfaccia. C'è qualche alternativa per farlo ??

È perché non è possibile ignorare i metodi statici. Cosa stai cercando di ottenere?

I membri nelle interfacce sono sempre pubblici in C #. Se devi avere altri livelli di protezione, usa una classe astratta. Quale sarebbe lo scopo degli eventi protetti se non riesci ad accedervi dall'interfaccia? Quindi non ha nulla a che fare con l'interfaccia (ricorda, l'interfaccia non può avere alcun codice). Se ti riferisci al fatto che solo le classi di implementazione possono generare eventi, puoi essere certo che sono gli unici che possono generarli. Gli eventi sono costruiti in questo modo - solo la classe stessa può generare eventi. Non è possibile generare un evento esterno alla classe (tranne se si dispone di un metodo sulla classe, che genera l'evento).

Altri suggerimenti

Le interfacce

descrivono il tuo implementatore solo al pubblico. L'unico modificatore di accesso per un'interfaccia è "interno" sull'interfaccia stessa, il che la rende un'interfaccia visibile solo a tutti i membri dello stesso assieme o a quelli resi noti con "InternalsVisibleTo"; attributo.

Se solo gli implementatori dovessero vedere un determinato evento, quell'evento dovrebbe essere in una sorta di classe base.

Un metodo statico è praticamente un residuo della programmazione procedurale. hanno il loro uso (vedi ad esempio i metodi di estensione) ma in realtà non hanno molto a che fare con OOP.

Sono in perdita su cosa intendi con la prima domanda, ma la tua seconda domanda sull'uso di interfacce protette è una semplice "no". Le interfacce sono chiamate "interfacce" perché specificano l'interfaccia " " (ovvero metodi pubblici) in cui è possibile comunicare con quell'oggetto.

La mia esperienza con OOP è in relazione con Actionscript 3, ma sono sicuro che sia relativo.

I metodi statici non possono essere sovrascritti e non vengono utilizzati quando una classe estende la classe antenata.

I modificatori di accesso non vengono utilizzati nell'interfaccia perché l'interfaccia viene utilizzata per impostare i metodi PUBLIC.

In AS3 un'interfaccia è semplicemente una firma del metodo senza blocco, ma include tipi di dati.

È importante notare che le firme del metodo getter / setter possono essere utilizzate anche in un'interfaccia. Questi sono utili e se usi solo un setter hai creato un accesso pubblico di sola lettura a una variabile incapsulata privata.

Per quanto riguarda l'interfaccia anziché una classe astratta, tutto dipende da come si desidera implementare il codice. Spesso tempi e interfaccia e una classe astratta sono usati insieme per ottenere risultati diversi utilizzando ereditarietà e polimorfismo (estensioni / strumenti).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top