C# .NET framework库是否被认为是用户定义的?
C#文档使用了“用户定义”一词。例如: as操作员无法执行。。。用户定义的转换 虽然我没有遇到正式的定义,但我假设C语言规范中没有的东西都是用户定义的 也就是说,我最初认为用户定义意味着任何语言之外的东西(而不是语言的一部分),但这可能不成立,因为可以用C实现C编译器 显然,C# .NET framework库是否被认为是用户定义的?,c#,.net,user-defined,C#,.net,User Defined,C#文档使用了“用户定义”一词。例如: as操作员无法执行。。。用户定义的转换 虽然我没有遇到正式的定义,但我假设C语言规范中没有的东西都是用户定义的 也就是说,我最初认为用户定义意味着任何语言之外的东西(而不是语言的一部分),但这可能不成立,因为可以用C实现C编译器 显然,int和double不是用户定义的;不过,使用String和DateTime时就不太清楚了 什么是框架库的一部分而不是C#的一部分呢?Yuval的回答表明框架库不是用户定义的,而Patrick的回答表明它们是用户定义的。是:
int
和double
不是用户定义的;不过,使用String
和DateTime
时就不太清楚了
什么是框架库的一部分而不是C#的一部分呢?Yuval的回答表明框架库不是用户定义的,而Patrick的回答表明它们是用户定义的。是:
请注意,as运算符仅执行引用转换、可为null的转换和装箱转换。as运算符不能执行其他转换,例如用户定义的转换,而应该使用强制转换表达式执行这些转换
在这种情况下,用户定义的转换是不由语言本身处理的转换。例如,该语言处理数字类型之间的转换。这些转换是内置在编译器中的,有点棘手,因为它们不能反映语言的“正常”行为(现在是他们构建它之后)
在编译器未涵盖的情况下,您需要自己执行强制转换。您可以为此使用转换运算符,如下所述
并直接回答标题问题:是。NET framework库被认为是用户定义的
因为在C中实现C编译器是可能的
很明显,int和double不是用户定义的;少一点
但是,使用字符串和日期时间清除
用户定义的转换与外观完全一样,是指由用户定义的转换。您可以在以下列表中清楚地看到它:
C#允许程序员在类或结构上声明转换
类或结构可以转换为其他类和/或从其他类转换
或结构,或基本类型。转换的定义与运算符和
根据其转换到的类型命名
现在,请看以下内容:
任何属于.NET但不属于C#的内容呢
.NET Framework=基类库+运行时。BCL提供的所有类型都是框架的一部分
string
和DateTime
也是框架的一部分。您可以自己创建不同的类型,这些类型是用户定义类型,这意味着您创建了它们,因为它们在BCL中不可用。对于编译器已知的基元类型,存在内置对话。其他定义的转换将属于用户定义的转换。通常,用户定义是指由用户(开发人员)定义的任何内容。但从C#的角度来看,无论是CLR还是C#中没有实现的,都属于用户定义的
这意味着即使是在.Net framework库中实现的,也被归类为用户定义的
例如,存在一个从XElement
到string
的显式转换运算符;它作为显式运算符在.Net framework(BCL)中实现。这仍然是一个用户定义的对流
按照下面的报价
as操作员无法执行。。。用户定义的转换
您不能使用作为
运算符来执行用户定义的转换(在本例中是显式的),但它是由BCL提供的
例如,以下代码段不会编译:
string someString = "someString";
XElement element = new XElement("SomeElement", "Value");
someString = (string)element;//Cast just works fine
someString = element as string;//You can't use as keyword here
因此,在此上下文中,用户定义是指C#或CLR未提供的任何内容。Net framework在这里也不例外。是否有您不确定的具体用途?它通常意味着开发者(即你)创建的东西@ShaunLuttin-抱歉,我似乎(不知何故)误读了这段引用。用户始终是使用.Net Framework的人,在此上下文中,您/您的团队/开发人员用户定义意味着隐式和显式运算符。我不知道你为什么对
DateTime
和String
感到困惑。很明显,它们不是用户定义的。到底谁是“用户”?例如,编写.NET核心库的人是否被视为用户?表示可以用C#实现编译器,但我不知道如何确认。@ShaunLuttin新的C#编译器是用C#编写的,名为“Roslyn”。请参阅我的链接。到底谁是用户?任何人如果编写的代码不是随.NET framework提供的现成代码。删除“真的吗?”会改进文章。如果我以外的人编写的库不是BCL的一部分,然后我引用他/她的库,那么所有这些都是用户定义的吗?