一个匿名类型能否继承自另一个类型?

8
根据 MSDN 对 StringComparer.OrdinalIgnoreCase 属性的文档:

OrdinalIgnoreCase 属性实际上返回一个从 StringComparer 类派生的匿名类实例。

这是我不熟悉的功能吗?通过继承来创建匿名类型?还是作者指的是“从 StringComparer 派生的内部类,对客户端代码不可见”的“匿名类”?

可能是Can a C# anonymous class implement an interface?的重复问题。 - nawfal
4个回答

9

在正常的C#术语中,它不是匿名类型。

它只是一种内部的类型,因此您不知道它的名称:您无法在代码中引用确切的类型。


谢谢,这基本上就是我想知道的。我给了+1,但接受了Will的答案,因为他实际上费心查看了源代码(我假设是在Reflector中)。 - Dan Tao
源代码可从微软下载(尽管他们的参考源项目是一团糟)- 我也已经在Windows上对其进行了索引,因此查找此类内容非常快速。http://referencesource.microsoft.com/netframework.aspx - Will Dean

7

如果您查看StringComparer的源代码,您会发现OriginalIgnoreCase返回一个从StringComparer派生的OrdinalComparer实例。

我认为这并没有什么“匿名”的地方,只是因为它是内部的,所以您无法从框架外部看到它。


谢谢你做了我太懒去做的事情——查看实际源代码 ;) - Dan Tao

4

编译器 可以创建继承自另一个类型的匿名类型 - 而您不行。真是太遗憾了,因为它是一个很酷的功能,可以在运行时创建一个继承自其他类或实现接口的匿名类型。


4
创建一个实现接口的匿名类型会很不错。 - BFree

3

匿名类型对于我们来说是匿名的,而不是CLR和编译器。编译器使用一个有趣的命名方式,其中包括<>在名称中,只有编译器才能这样做!而且可能是Chuck Norris……


4
查克·诺里斯知道匿名类型的名称。 - Tim Robinson
1
没错,但我不确定文档中的“匿名”是否指的是编译器生成的类型,例如 C# 的匿名类型功能提供的类型。从威尔的回答中可以得知,它实际上是完全不同的含义。 - Dan Tao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接