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

时间:2011-01-29 09:40:32

标签: c#

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

考虑System.Console类,它显然是用于特定事物的东西。从本质上讲,这个东西可以很好地运行Windows /当前操作系统的功能。这不是我所说的语言的核心组成部分。

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

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

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

提前致谢。

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

3 个答案:

答案 0 :(得分:12)

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< T>
  • 的System.Array
  • System.Exception(以及各种子类 - 请参阅规范的第16.4节)
  • System.Delegate(可能还有System.MulticastDelegate)
  • System.IDisposable的
  • System.Attribute(以及一些特定属性,例如ConditionalAttribute和ObsoleteAttribute)
  • 的System.Type
  • System.Collections.IEnumerable / IEnumerator
  • System.Collections.Generic.IEnumerable< T> / IEnumerator< T>
  • System.Collections.Generic.IList< T>
  • System.Threading.Monitor
  • System.Threading.Interlocked
  • System.Linq.Expressions.Expression< T>
  • 任务和任务< T>对于C#5
  • System.GC(在规范中提到,但未被编译器AFAIK明确使用)

现在任何目标框架都需要比实现更多的类型 - 比如评论中提到的MethodInfo之类的东西,可能是属性来装饰参数(和整个其他类型的动态类型)。但是不同的目标系统可能有不同的实现 - 在编写真正的可移植C#时,你不能依赖它们。

答案 1 :(得分:1)

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

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

这也非常适合理解C#。

答案 2 :(得分:1)

  • Expression类(不仅仅是Expression<T>),因为C#可以将lambda转换为表达式
  • IEnumeratorIEnumerator<T>foreach使用的yield - 迭代器
  • 一些神奇的属性,支持关键字dynamicparamsout和扩展方法
  • System.Type