可能重复:
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
显然int
,decimal
,bool
等。还有其他人吗?
答案 0 :(得分:2)
这是一个很难回答的问题。好吧,我将从您可以在源代码中编写的文字值开始,这些值不需要在运行时进行评估:
"String"
'c'
decimal
,float
,double
int
,uint
,long
,ulong
(short
,ushort
,byte
和{{ 1}}也是所有支持的关键字,但它们需要强制转换,不像这四个)sbyte
| true
)(也隐含在false
或a == b
等评估中使用)c < d
文字(实际上不是一种类型,但为了完整起见,我把它放在这里,因为它可以代表任何和所有引用类型。)现在,语言结构:
null
bool[]
char[]
等(支持上面显示的所有类型,除了 null 以及所有用户定义的类型float[]
bool?
char?
etc (框值类型允许额外值 null )float?
- 正如您所说,返回Type,因此c#语言支持Type类型。此外,对于每个单个对象引用或值类型,您可以在其上调用GetType()以检索相同的内容 - 这是继承自 object 。typeof(T)
,IEnumerable
,IEnumerator
和IEnumerable<T>
IEnumerator<T>
System.Threading.Monitor
,Func<T>
,Func<T1, T2, ... TN>
,Action
,Action<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)
我将添加到列表中:
IEnumerable
,IEnumerable<T>
,IEnumerator
和IEnumerator<T>
作为包含yield break
和/或yield return
的方法或媒体资源的返回类型是这些类型之一,编译器生成的类将实现它。
我不同意以下逻辑:
System.Attribute
因为您可以使用[Foo]
代替[FooAttribute]
因为这只是一些糖,这意味着如果属性的名称以“属性”结尾,并且没有其他属性的名称与没有“属性”的名称相同,那么您可以省略该位。 System.Attribute
仍然是一个例子,因为你不能将一个对象用于一个属性,除非它是它的后代。