C# .NET framework库是否被认为是用户定义的?

C# .NET framework库是否被认为是用户定义的?,c#,.net,user-defined,C#,.net,User Defined,C#文档使用了“用户定义”一词。例如: as操作员无法执行。。。用户定义的转换 虽然我没有遇到正式的定义,但我假设C语言规范中没有的东西都是用户定义的 也就是说,我最初认为用户定义意味着任何语言之外的东西(而不是语言的一部分),但这可能不成立,因为可以用C实现C编译器 显然,int和double不是用户定义的;不过,使用String和DateTime时就不太清楚了 什么是框架库的一部分而不是C#的一部分呢?Yuval的回答表明框架库不是用户定义的,而Patrick的回答表明它们是用户定义的。是:

C#文档使用了“用户定义”一词。例如:

as操作员无法执行。。。用户定义的转换

虽然我没有遇到正式的定义,但我假设C语言规范中没有的东西都是用户定义的

也就是说,我最初认为用户定义意味着任何语言之外的东西(而不是语言的一部分),但这可能不成立,因为可以用C实现C编译器

显然,
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的一部分,然后我引用他/她的库,那么所有这些都是用户定义的吗?