C# 隐式与显式转换

C# 隐式与显式转换,c#,typeconverter,C#,Typeconverter,我做了一个在线评估,我试图了解结果,下面是我已经做过的几个问题: 所以问题是: 我也有一部分是对的,在读了关于这个主题的文章后,我会选择选项A和D,你们能确认吗 非常感谢 Marco隐式转换不需要强制转换: int a = 10; long b = a; long a = 10; int b = (int)a; 显式转换确实需要强制转换: int a = 10; long b = a; long a = 10; int b = (int)a; 要定义(而不是调用)隐式转换,请使用i

我做了一个在线评估,我试图了解结果,下面是我已经做过的几个问题:

所以问题是:

我也有一部分是对的,在读了关于这个主题的文章后,我会选择选项A和D,你们能确认吗

非常感谢


Marco

隐式转换不需要强制转换:

int a = 10;
long b = a;
long a = 10;
int b = (int)a;
显式转换确实需要强制转换:

int a = 10;
long b = a;
long a = 10;
int b = (int)a;
要定义(而不是调用)隐式转换,请使用
implicit
关键字:

public static implicit operator MyOther(MyThis obj);
public static explicit operator MyOther(MyThis obj);
要定义显式转换,请使用
explicit
关键字:

public static implicit operator MyOther(MyThis obj);
public static explicit operator MyOther(MyThis obj);
通常,当信息可能在转换过程中丢失或发生异常时,会使用显式转换。例如,将64位
long
整数转换为32位
int
整数可能会丢失32个最重要的信息位


所以,我确信A是真的,B,C和E是假的。我不理解D的问题。如果他们的意思是调用隐式转换,那么它是错误的。如果他们的意思是定义隐式转换,那么这是真的。

当然不是B、C或E。我不喜欢D的措辞。我不知道他们所说的“完成”是什么意思。你可以使用隐式关键字定义隐式转换,但你不会使用该关键字消费和执行这种转换。那么他们所说的“完成”是什么意思呢?我只会选择A。我只想检查一个是A,但由于
X
的隐式转换,
foreach(X X in…
即使只有显式转换到
X
@AnthonyPegram,也会产生疑问,是的,措辞没有帮助。@CodesInChaos我们有隐式运算符,这就是为什么我也想知道D的原因。@Marco关键字
隐式
用于声明运算符,但不用于进行转换。谢谢您的回答。我确实知道两者之间的区别,至少有一些区别,我在理解问题的措辞时遇到了问题。关于答案D,我也不确定,因为正如你所说,在定义和隐式转换时使用隐式关键字。