Come si chiama un'interfaccia senza metodi di definizione utilizzati come setter di proprietà

7

In ASP.NET e C # mi sono imbattuto in questo prima. La tua classe deve implementare l'interfaccia ISomething affinché qualcosa nella super classe ti fornisca qualcosa.

Non riesco a ricordare i dettagli, perché l'ho incontrato molto tempo fa, ma aveva qualcosa a che fare con le variabili di sessione in ASP.NET C #. Faceva parte del framework .NET.

In un primo momento, ho pensato che questa pratica fosse piuttosto sciocca e potesse essere implementata più agevolmente. Comunque ora mi sto trovando ad implementare questo aspetto nell'architettura di un progetto cresciuto in casa su cui sto lavorando. Usando il reflection, rilevo l'attivazione o la disattivazione di un comportamento in base a se implementa ISomething. Solo un'interfaccia vuota senza metodi.

Qual è il nome tecnico per questo ed è una buona pratica?

    
posta Styler 14.08.2012 - 06:30
fonte

3 risposte

8

Marker Interface

È una buona pratica? Bene, come molte cose alcune persone li amano e alcune persone li odiano. Vedi i link nell'articolo di Wikipedia per la discussione. Personalmente penso che siano raramente utili. La presenza di un marker è essenzialmente solo un booleano. Mi sembra preferibile definire un'interfaccia che consenta un flusso di informazioni più ricco e quindi che passi i riferimenti usando quel tipo effettivo.

    
risposta data 14.08.2012 - 07:31
fonte
3

Stai pensando di accedere allo stato della sessione in un gestore generico .ashx implementando l'interfaccia (vuota) IRequiresSessionState ?

Non so quale sia il nome tecnico per quello. È una buona pratica? Beh, non sono del tutto sicuro del motivo per cui non è stato fatto usando un attributo.

es. invece di:

public class MyGenericHandler : IHttpHandler, IRequiresSessionState
{
}

Senza fare:

[RequiresSessionState]
public class MyGenericHandler : IHttpHandler
{
}

Questo sembra certamente più intuitivo e più in linea con le funzionalità implementate più di recente in ASP.NET e nel framework .NET.

    
risposta data 14.08.2012 - 07:24
fonte
0

È semplice: funziona con le normali interfacce. È usato molto in Java, Java manca tutti i campanelli e fischietti di C #. Se lo usi, non dovresti nemmeno aver bisogno di una riflessione (a meno che "is" sia parte della riflessione), solo:

if (list is RandomAccess)  element = list[1000000005];
else Consol.WriteLine( "You do not have enough time to wait." )

(Il codice C #, RandomAccess è Java. Penso.) Può essere anche più semplice, come:

public int GetElement( RandomAccess list )  { ... }

che significa che non devi mai nemmeno controllare per un elenco collegato che si nasconde furtivamente.

E non è necessaria alcuna tecnologia oltre le interfacce. È più una cosa Java-y che una cosa .NET. Semplice, aggraziato, intelligente e un po 'subdolo. Meglio? Non so.

    
risposta data 14.08.2012 - 17:07
fonte