2010-11-26 98 views
8

据有关StringComparer.OrdinalIgnoreCase财产MSDN文档:匿名类型是否可以继承另一种类型?

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

这是我不熟悉的一个特性 - 具有继承性的匿名类型?或者作者“匿名类”是否仅仅意味着“内部类从StringComparer派生,对客户端代码不可见”?

+0

可能重复[可以C#匿名类实现接口吗?](http://stackoverflow.com/questions/191013/can-ac-sharp-anonymous-class-implement-an-interface) – nawfal 2013-04-19 06:36:15

回答

7

如果你看看StringComparer的源代码,你可以看到OrginalIgnoreCase返回OrdinalComparer的实例,它是从StringComparer派生的。

对此我没有任何'匿名',我可以看到,它只是它的内部所以你不能从框架外部看到它。

4

编译器可以创建从另一种类型继承的匿名类型 - 你不能。这太糟糕了,真的很酷,因为创建一个匿名类型可以从另一个类继承,或者实现一个接口。

+4

是的,创建一个实现接口的匿名类型将会很整洁。 – BFree 2010-11-26 17:20:26

9

它不是这个术语的正常C#含义中的匿名类型。

这只是一个内部类型,所以你不知道它的名字:你不能在你的代码中引用确切的类型。

+0

谢谢;这基本上是我想知道的。我给了这个+1,但接受了Will的回答,因为他真的去看了源代码的麻烦(在Reflector中,我假设)。 – 2010-11-26 17:38:47

+0

源代码可以从MS下载(虽然他们的参考源项目是一个可耻的混乱) - 我也有它的Windows索引,所以它很快看到这种东西了。 http://referencesource.microsoft.com/netframework.aspx – 2010-11-26 18:02:04

3

匿名类型是匿名对我们来说不是CLR和编译器。编译器使用一个有趣的命名,其中包含名称中的<>,只有编译器才能做到这一点!和也许查克诺里斯 ...

+4

Chuck Norris知道匿名类型的名称。 – 2010-11-26 17:33:04