2010-11-26 7 views
8

Selon la documentation MSDN sur la propriété StringComparer.OrdinalIgnoreCase:Un type anonyme peut-il hériter d'un autre type?

La propriété OrdinalIgnoreCase retourne en fait une instance d'une classe anonyme dérivée de la classe StringComparer.

Est-ce une caractéristique que je ne connais pas - les types anonymes avec l'héritage? Ou par "classe anonyme" l'auteur a-t-il simplement voulu dire "classe interne dérivant de StringComparer, non visible par le code client"?

+0

duplication possible de [Une classe anonyme C# peut-elle implémenter une interface?] (Http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class-implement-an-interface) – nawfal

Répondre

7

Si vous regardez le code source pour StringComparer, vous pouvez voir que OrginalIgnoreCase renvoie une instance de OrdinalComparer, qui est dérivé de StringComparer.

Il n'y a rien de "anonyme" à ce sujet que je puisse voir, c'est juste que c'est interne donc vous ne pouvez pas le voir de l'extérieur du cadre.

+0

Merci de faire ce que j'étais trop paresseux à faire - en regardant la source réelle;) –

4

Le compilateur peut créer des types anonymes qui héritent d'un autre type - vous ne pouvez pas. C'est vraiment dommage, car ce serait une super fonctionnalité de créer un type anonyme à la volée qui hérite d'une autre classe ou qui implémente une interface.

+4

Oui, créer un type anonyme qui implémente une interface serait plutôt soigné. – BFree

9

Ce n'est pas un type anonyme dans la signification C# normale du terme.

C'est juste un type qui est interne, donc vous n'en connaissez pas le nom: vous ne pouvez pas vous référer au type exact dans votre code.

+0

Merci; c'est essentiellement ce que je me demandais. J'ai donné ce +1 mais j'ai accepté la réponse de Will puisqu'il s'est réellement donné la peine de regarder le code source (dans Reflector, je suppose). –

+0

Le code source est téléchargeable à partir de MS (bien que leur projet source de référence soit un désastre honteux) - Je l'ai aussi indexé par Windows, donc c'est très rapide de regarder ce genre de choses. http://referencesource.microsoft.com/netframework.aspx –

3

Type anonyme est anonyme pour nous pas le CLR et complier. Le compilateur utilise un nom drôle qui inclut <> dans le nom et seul le compilateur peut le faire! et peut-être Chuck Norris ...

+4

Chuck Norris connaît le nom du type anonyme. –

+3

Chuck Norris peut tirer plusieurs héritages sur un type anonyme ... – Aliostad

+1

Bon, mais je ne savais pas si * this * correspondait à ce que la documentation voulait dire par "anonyme" (le type généré par le compilateur fourni par, par exemple, les caractères anonymes de C#). Il s'avère que, d'après la réponse de Will, c'est simplement un sens différent. –

Questions connexes