C# n'autorise pas les structures pour dériver de classes, mais tous les ValueTypes dériver de l'Objet. D'où cette distinction est-elle faite?
Comment le CLR gérer cela?
C# n'autorise pas les structures pour dériver de classes, mais tous les ValueTypes dériver de l'Objet. D'où cette distinction est-elle faite?
Comment le CLR gérer cela?
C# n'autorise pas les structures pour dériver de classes
Votre affirmation est incorrecte, d'où ta confusion. C# n' permettre aux structures de dériver de classes. Toutes les structures dérivent de la même classe, d'un Système.ValueType, qui dérive du Système.Objet. Et tous les énumérations dériver à partir du Système.Enum.
D'où cette distinction est-elle faite?
Il est fait partout dans le monde, que le compilateur s'exécute. :-)
Sérieusement, je ne comprends pas la question. Qu'entendez-vous par "où"?
Comment le CLR gérer cela?
Extrêmement bien. :-)
Encore une fois, je ne comprends pas ce que vous demandez. Ce qui fait un type de valeur d'un type de valeur, c'est que ses instances sont copiés par valeur. Ce qui fait une référence type référence type, c'est que ses instances sont copiés par référence. Vous semblez avoir une certaine croyance que l' héritage de la relation entre les types valeur et les types référence est quelque peu spécial et inhabituel, mais je ne comprends pas ce que cette croyance est. L'héritage n'a rien à voir avec la façon dont les choses sont copiés.
Regardons cela de cette façon. Supposons que je vous ai dit les faits suivants:
Il existe deux types de boîtes, rouge des boîtes et des boîtes bleues.
Chaque case rouge est vide.
Il y a trois cases bleues appelé O, V et E.
O n'est pas à l'intérieur d'une boîte.
V est à l'intérieur d'O.
E est à l'intérieur de V.
Aucune autre boîte bleue est à l'intérieur de V.
Pas de boîte bleue est à l'intérieur d'E.
Chaque case rouge est en soit V ou E.
Chaque boîte bleue autres que O est elle-même à l'intérieur d'une zone bleue.
Les cases bleues sont des types référence, les zones rouges sont des types valeur, O est le Système.Objet, V est le Système.ValueType, E est le Système.Enum, et l ' "intérieur" relation "dérive de".
C'est parfaitement cohérent et simple ensemble de règles que vous pourriez facilement mettre en œuvre vous-même, si vous avez eu beaucoup de carton et beaucoup de patience. Si une boîte est rouge ou bleu n'a rien à voir avec ce qu'il y a à l'intérieur; dans le monde réel, il est parfaitement possible de mettre une boîte rouge à l'intérieur d'une zone bleue. Dans le CLR, il est parfaitement légal de faire un type de valeur qui hérite d'un type de référence, tant que c'est l'un ou l'autre Système.ValueType ou d'un Système.Enum.
Donc, nous allons reformuler votre question:
Comment faire ValueTypes dériver de l'Objet (ReferenceType) et encore ValueTypes?
comme
Comment est-il possible que chaque boîte rouge (valeur type) est à l'intérieur (dérive) de la boîte de O (Système d'.Objet), qui est une boîte bleue (un Type de référence) et encore une boîte rouge (valeur type)?
Lorsque vous phrase comme ça, j'espère que c'est évident. Il n'y a rien qui vous empêche de mettre une boîte rouge à l'intérieur de la boîte de V, qui est à l'intérieur de la case O, qui est bleu. Pourquoi y aurait-il?
Petite correction, C# ne pas permettre à des structures à la coutume de tirer de tout, pas seulement les classes. Tous une struct pouvez faire est de mettre en œuvre une interface qui est très différent de dérivation.
Je pense que la meilleure façon de répondre à cette question est qu' ValueType
est spécial. C'est essentiellement la classe de base pour tous les types de valeur dans le CLR type de système. Il est difficile de savoir comment répondre à "comment le CLR poignées de ce" parce que c'est une simple règle de la CLR.
C'est un peu artificielle construire maintenu par le CLR, afin de permettre à tous les types d'être traité comme un Système.Objet.
Les types de valeurs de dériver à partir du Système.Objet à travers le Système.ValueType, qui est l'endroit où le traitement spécial se produit (c'est à dire: le CLR poignées boxing/unboxing, etc pour tout type résultant de ValueType).
Un coffret type de valeur est en fait un type de référence (il marche comme un seul et charlatans comme un, donc, effectivement, il en existe un). Je dirais que ValueType n'est pas vraiment le type de base de types de référence, mais plutôt est à la base type de référence à laquelle les types de valeurs peuvent être converties en fonte de type Objet. Non encadré types de valeur sont eux-mêmes en dehors de la hiérarchie de l'objet.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.