MSDN définit System.Enum comme une classe abstraite:Pourquoi ne puis-je pas dériver de la classe abstraite System.Enum?
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible
Et aussi MSDN fait cette déclaration au sujet de classe abstraite:
Une classe abstraite ne peut pas être instancié. Le but d'une classe abstraite est de fournir une définition commune d'une classe de base que plusieurs classes dérivées peuvent partager.
Mais je ne peux tout simplement pas dériver de System.Enum. Selon Jeffery Richter dans son livre "CLR via C#", c'est le compilateur C# qui interdit cette dérivation.
Et j'ai vérifié les membres de System.Enum, la plupart d'entre eux sont statiques, ce qui est raisonnable car il ne peut pas être instancié et les méthodes statiques n'ont pas besoin d'une instance d'objet à invoquer. Mais il existe également des méthodes d'instance, telles que GetHashCode() et GetTypeCode().
Alors, ma première question est, si System.Enum ne peut pas être instancié ou dérivé, comment pourrait- ces méthodes d'instance être invoquée? N'est-ce pas une sorte de paradoxe?
Je sais que je pourrais utiliser l'approche suivante pour invoquer ces méthodes d'instance , mais pourquoi? Y a-t-il un type de System.Enum ou un type dérivé objet instance créé? Quand? et par qui?
public enum Days:byte { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };
Days d = Days.Friday;
d.GetTypeCode();
d.GetHashCode();
Les jours dérivent d'enum ... quelle est votre confusion? –