2010-01-05 12 views
60

Questa è una domanda di sintassi. Ho una classe generica che eredita da una classe base generica e applica un vincolo a uno dei parametri del tipo. Voglio anche che la classe derivata implementa un'interfaccia. Per la vita di me, non riesco a capire la sintassi corretta.Eredita da una classe base generica, applica un vincolo e implementa un'interfaccia in C#

Questo è quello che ho:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... } 

La prima cosa che è venuta in mente è stato questo:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... } 

Ma questo non è corretto, come che causa T2 per necessità di implementare sia IBar e IFoo , non DerivedFoo per implementare IFoo.

Ho provato un po 'di ricerca su Google, l'uso di due punti, punto e virgola, ecc., Ma sono risultato breve. Sono sicuro che la risposta è semplicissima.

+0

PlusOne per schiaffo semplice. – Robino

risposta

100

È possibile includere l'intera firma della classe prima di definire i vincoli generici.

class DerivedFoo<T1, T2> : ParentFoo<T1, T2>, IFoo where T2 : IBar 
{ 
    ... 
} 
+3

Per altri, l'ho interiorizzato come, una classe ottiene solo una clausola where, e va alla fine per qualsiasi vincolo di tipo generico. – Visser

+0

@Visser E 'permesso avere più clausole where, classe Test dove T1: Interface1 dove T2: Interface2 – bwing

6
public interface IFoo {} 
public interface IBar {} 

public class ParentFoo<T,T1> { } 
public class DerivedFoo<T, T1> : ParentFoo<T, T1>, IFoo where T1 : IBar { } 
14

La mia raccomandazione: quando hai una domanda circa la sintassi del linguaggio C#, leggere le specifiche; è per questo che lo pubblichiamo. Ti consigliamo di leggere la sezione 10.1.

Per rispondere alla tua domanda specifica, l'ordine delle cose in una dichiarazione di classe è:

  • attributi, tra parentesi quadre
  • modificatori ("pubblico", "statica", e così via)
  • "parziale"
  • "classe"
  • il nome della classe
  • un elenco separato da virgole di dichiarazioni di parametri di tipo parentesi angolari
  • un colon seguito un elenco separato da virgole di tipi di base (classe di base e interfacce implementate, classe base deve andare in primo luogo se presente)
  • tipo di parametro vincoli
  • il corpo della classe, circondato da bretelle
  • un punto e virgola

tutto su quella lista è facoltativa tranne che per "classe", il nome, e il corpo, ma tutto deve apparire in questo ordine se appare.

+62

Eric, mentre io ti rispetto grandemente come professionista e apprezzo il tuo feedback, non posso fare a meno di essere frustrato da ciò che viene attraverso come una risposta abrasiva. Mi stai criticando per aver scelto di porre una domanda su un sito di domande e risposte sulla programmazione per localizzare, scaricare e cercare attraverso un documento Word di 503 pagine altamente tecnico sepolto da un link in MSDN. Questo è piuttosto difficile. Questo è stato l'uso più efficiente del mio tempo e ha l'ulteriore vantaggio di poter aiutare qualcun altro in seguito.Il link al C# Lang Spec per chi è interessato è: http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx –

+12

Nessuna critica era intesa. C'è un pregiudizio pervasivo nella comunicazione in puro testo, che rende semplici le dichiarazioni di fatti brusche e abrasive; Cerco di leggere caritatevolmente quando viene presentato un elenco di fatti utili e mi raccomando di farlo anche tu. Sostengo la mia raccomandazione; in caso di domande sulla sintassi, la specifica risponde in modo definitivo e inizia con un sommario utile per individuare le definizioni di sintassi specifiche. –

+2

Dan, trovare le specifiche C# è semplice come inserire "C# Spec" in Google e premere il pulsante "I am lucky". E se sei uno sviluppatore C# professionale, dovresti già avere la specifica C# in formato PDF sulla tua macchina. Inoltre, non intendo criticarti neanche tu. Non ero abituato a leggere le specifiche in precedenza, ma ho iniziato a leggerlo grazie a Jon, Eric e Pavel che citano sempre le specifiche C# per qualsiasi domanda. Ho trovato che la specifica C#, anche se a volte potrebbe essere difficile da leggere, è un ottimo modo per conoscere la lingua. – SolutionYogi

Problemi correlati