I vincoli sono "ed-ed" insieme; all i vincoli devono essere soddisfatti.
In quali circostanze può essere sia T un non-nullable tipo di valore e anche la conversione implicita del MyBase classe tramite l'identità, la boxe o il riferimento di conversione?
Non ci sono tali circostanze, quindi non esiste alcun argomento di tipo che soddisfi i vincoli di T. Piuttosto che permettervi di definire una serie di vincoli che non possono essere soddisfatti, il compilatore semplicemente lo disattiva. Non è possibile affermare che è necessario il vincolo struct
e un vincolo class type
.
Sto usando struct per vincolare a enumerazioni
che illustra il mio punto. Dal momento che non ci sono enumerazioni che ereditano da MyBase
, il vincolo non può essere rispettato.
Puoi descrivere per me cosa pensavi che significasse? Ad esempio, pensavi che significasse "qualsiasi tipo di valore non annullabile o qualsiasi tipo che è convertibile in MyBase"? Mi interessa sapere perché la gente crede cose false su C# in modo che io possa provare a migliorarlo.
AGGIORNAMENTO: Ah, vedo - MyBase è destinato ad essere la classe base di MyClass<T>
, non la classe base di T
. In C#, esso va:
class [class name] < [generic type parameters] >
: [base classes and interfaces]
where [type parameter] : [constraints]
Dovete mettere le classi base e le interfacce prima i vincoli, altrimenti il compilatore pensa che essi siano i vincoli.
fonte
2012-02-01 00:16:28
grazie a tutti per le diverse opzioni grazie a voi ragazzi che lo leggono in modi diversi. –
Le cattive notizie viaggiano lentamente, non è possibile vincolare un argomento di tipo a System.Enum. La storia non era gentile con le enumerazioni, erano strutturalmente incompatibili avendo dimensioni diverse per il loro tipo di implementazione. Una ottimizzazione troppa nel linguaggio C, bloccata su C# a causa dell'interop. –