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转换为表达式 -
IEnumerator
,IEnumerator
由foreach
和yield
-iterators使用 - 一些神奇的属性,支持关键词
dynamic
,params
,out
和extension-methods -
System.Type