【问题标题】:Can an anonymous type inherit from another type?匿名类型可以从另一种类型继承吗?
【发布时间】:2010-11-26 17:09:44
【问题描述】:

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

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

这是我不熟悉的特性——具有继承的匿名类型吗?还是作者所说的“匿名类”只是指“源自StringComparer 的内部类,客户端代码不可见”?

【问题讨论】:

标签: c# .net anonymous-types anonymous-class stringcomparer


【解决方案1】:

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

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

【讨论】:

  • 谢谢;这基本上就是我想知道的。我给了这个 +1 但接受了 Will 的回答,因为他实际上是在查看源代码时遇到了麻烦(我假设是在 Reflector 中)。
  • 源代码可以从 MS 下载(虽然他们的参考源项目是一个可耻的混乱) - 我也有它被 Windows 索引,所以查找这类东西非常快。 referencesource.microsoft.com/netframework.aspx
【解决方案2】:

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

我看不到任何“匿名”,只是它是内部,因此您无法从框架外部看到它。

【讨论】:

  • 感谢您做我懒得做的事——查看实际来源;)
【解决方案3】:

编译器 可以创建从其他类型继承的匿名类型 - 你不能。太糟糕了,因为动态创建匿名类型(继承自另一个类或实现接口)将是一个很酷的功能。

【讨论】:

  • 是的,创建一个实现接口的匿名类型会很整洁。
【解决方案4】:

匿名类型对我们来说是匿名,而不是 CLR 和编译器。编译器使用了一个有趣的命名,其中包含 在名称中,只有编译器可以这样做!还有也许是查克·诺里斯...

【讨论】:

  • Chuck Norris 知道匿名类型的名称。
  • 是的,但我不确定 this 是否是文档中的“匿名”(例如 C# 的匿名类型功能提供的编译器生成的类型)的意思。事实证明,从威尔的回答来看,这只是一个完全不同的含义。
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 2020-05-09
相关资源
最近更新 更多