C#.NET框架的哪些部分实际上是语言的一部分?

我想知道系统的哪些部分是语言function(核心组件),哪些部分只是有用的填充,但并非严格必要。 我可能会对这里的措辞不满意,所以让我用一个例子来说明我的意思。

考虑System.Console类,它显然是用于非常特殊的东西。 从本质上讲,这个东西可以很好地发挥Windows /当前操作系统的function。 这不是我所说的语言的核心组成部分。

另一方面,采用System.IDisposable接口。 那个东西显然非常重要,因为没有它, using()语句就没用了。 类需要实现此特定接口才能启动语言function。

我可以假设mscorlib是这里的责任方。 快速浏览一下Object explorer,可以看出它确实包含了许多我认为是核心的组件,同时它将Console类放入System命名空间,这只是填充程序。

将填充和特定于语言的对象放入同一命名空间的概念等同于它们,但为了更深入地理解C#,我想知道哪个是哪个。 所以,我正在寻找C#的核心组件列表。 我假设某个地方有一个方便的参考,但由于我在google讲座期间睡着了,我无法形成正确的查询来找到它。

提前致谢。

很久以后编辑我读了这篇 Lippert博客文章,它有点相关。 有趣的是, foreach构造实际上并不需要IEnumerable接口来运行。

C#实际上并不需要很多类型。 我可以想到我的头顶并快速检查规格:

  • System.Object的
  • System.Enum
  • System.ValueType
  • 原始类型:System。{Int16,Int32,Int64,UInt16,UInt32,UInt64,Byte,SByte,Double,Single,Char,Boolean}
  • System.String
  • System.Decimal
  • System.Nullable
  • 的System.Array
  • System.Exception(以及各种子类 – 参见规范的第16.4节)
  • System.Delegate(可能还有System.MulticastDelegate)
  • System.IDisposable的
  • System.Attribute(以及一些特定属性,例如ConditionalAttribute和ObsoleteAttribute)
  • 系统类型
  • System.Collections.IEnumerable / IEnumerator
  • System.Collections.Generic.IEnumerable / IEnumerator
  • System.Collections.Generic.IList
  • System.Threading.Monitor
  • System.Threading.Interlocked
  • System.Linq.Expressions.Expression
  • C#5的任务和任务
  • System.GC(在规范中提到,但编译器AFAIK没有明确使用)

现在任何目标框架都需要比实现过程更多的类型 – 例如在注释中提到的MethodInfo ,可能是用于装饰参数的属性(以及用于动态类型的一大堆其他类型)。 但是不同的目标系统可能有不同的实现 – 在编写真正的可移植C#时,你不能依赖它们。

也许寻找那种语言“核心”的类型是错误的起点。

任何.NET应用程序都由CLR运行,因此更重要的视角是“CLR的基本部分/类是什么”。

这也是理解C#的真正原因。

  • Expression类(不仅仅是Expression ),因为C#可以将lambda转换为表达式
  • IEnumeratorIEnumeratorforeachyield -iterators使用
  • 一些神奇的属性,支持关键词dynamicparamsout和extension-methods
  • System.Type