C#中的语法依赖于哪些类型?

时间:2012-01-19 12:32:44

标签: c# syntax clr

  

可能重复:
  Which parts of C# .NET framework are actually parts of the language?

我知道它使用

  • System.Type,例如typeof(foo)
  • System.Attribute因为您可以使用[Foo]代替[FooAttribute]
  • System.String因为你可以写"bla".ToLower()
  • System.Exception因为throw obj仅适用于此类型或继承类型。
  • System.Array显然
  • 以及所有内置值类型intdecimalbool等。

还有其他人吗?

4 个答案:

答案 0 :(得分:2)

这是一个很难回答的问题。好吧,我将从您可以在源代码中编写的文字值开始,这些值不需要在运行时进行评估:

  • string "String"
  • char 'c'
  • 真实价值观decimalfloatdouble
  • INTEGRAL VALUETYPES intuintlongulongshortushortbyte和{{ 1}}也是所有支持的关键字,但它们需要强制转换,不像这四个)
  • bool(sbyte | true)(也隐含在falsea == b等评估中使用)
  • c < d文字(实际上不是一种类型,但为了完整起见,我把它放在这里,因为它可以代表任何和所有引用类型。)

现在,语言结构:

  • 数组null bool[] char[] (支持上面显示的所有类型,除了 null 以及所有用户定义的类型
  • nullable float[] bool? char? etc (框值类型允许额外值 null
  • float? - 正如您所说,返回Type,因此c#语言支持Type类型。此外,对于每个单个对象引用或值类型,您可以在其上调用GetType()以检索相同的内容 - 这是继承自 object
  • 对于foreach和查询表达式,
  • typeof(T)IEnumerableIEnumeratorIEnumerable<T>
  • 对于lock()语句
  • IEnumerator<T>
  • 对于lambda表达式,
  • System.Threading.MonitorFunc<T>Func<T1, T2, ... TN>ActionAction<T>
  • Action<T1, T2, ... TN>使用()语句的接口
  • IDisposable类用于try语句中的catch(ExceptionClassType){}子句。

当我想到它们时,我会更新。

答案 1 :(得分:0)

根据我对您的问题的理解,您希望创建一个预定义类的列表,C#编译器需要知道这些类以支持C#语言功能。

从头顶上,我将添加以下内容:

  • System.Object,基类,
  • System.ValueType,所有struct继承,
  • System.Delegate,委托类型的基类。

答案 2 :(得分:0)

不确定我完全理解这个问题,但是......

System.IDisposable仅适用于using(var myDisposable = new MyDisposable()){...},其中MyDisposable实施IDisposable

答案 3 :(得分:0)

我将添加到列表中:

IEnumerableIEnumerable<T>IEnumeratorIEnumerator<T>作为包含yield break和/或yield return的方法或媒体资源的返回类型是这些类型之一,编译器生成的类将实现它。

我不同意以下逻辑:

  

System.Attribute因为您可以使用[Foo]代替[FooAttribute]

因为这只是一些糖,这意味着如果属性的名称以“属性”结尾,并且没有其他属性的名称与没有“属性”的名称相同,那么您可以省略该位。 System.Attribute仍然是一个例子,因为你不能将一个对象用于一个属性,除非它是它的后代。