C# 何时使用关键字";隐式;或;明确的;当重载转换运算符时?

C# 何时使用关键字";隐式;或;明确的;当重载转换运算符时?,c#,type-conversion,overloading,C#,Type Conversion,Overloading,我现在在学C#。本教程没有明确说明在重载转换运算符时何时使用关键字implicit或explicit 它提供的示例如下所示: 当Class1包含类型为int的字段和Class2包含类型为double的字段时,我们应该定义从Class2到Class1的显式转换,以及从Class1到Class2的隐式转换 教程没有说明如果我使用了错误的关键字会发生什么 但是如果Class1包含一个复杂的子类,而Class2包含一个不同的子类,我应该在隐式和显式之间使用哪个关键字?有人能给出一个明确的解释吗?非常感谢

我现在在学C#。本教程没有明确说明在重载转换运算符时何时使用关键字
implicit
explicit

它提供的示例如下所示:

Class1
包含类型为
int
的字段和
Class2
包含类型为
double
的字段时,我们应该定义从
Class2
Class1
的显式转换,以及从
Class1
Class2
的隐式转换

教程没有说明如果我使用了错误的关键字会发生什么

但是如果
Class1
包含一个复杂的子类,而
Class2
包含一个不同的子类,我应该在
隐式
显式
之间使用哪个关键字?有人能给出一个明确的解释吗?非常感谢

隐式转换:不需要特殊语法,因为 转换是类型安全的,不会丢失任何数据。例子包括 从较小整数类型到较大整数类型的转换,和转换 从派生类到基类

显式转换(强制转换):

显式转换需要强制转换运算符。在以下情况下需要浇铸: 信息可能在转换过程中丢失,或者在转换时丢失 可能因为其他原因而无法成功。典型的例子包括数值模拟 转换为精度较低或范围较小的类型,和 将基类实例转换为派生类。

检查本说明中的粗体文本。下面是详细的文章

下面是一个小代码示例:

// Create a new derived type.
Giraffe g = new Giraffe();

// Implicit conversion to base type is safe.
Animal a = g;

// Explicit conversion is required to cast back
// to derived type. Note: This will compile but will
// throw an exception at run time if the right-side
// object is not in fact a Giraffe.
Giraffe g2 = (Giraffe) a;

我不认为这是完全相同的。一个问题是为什么浮点到双隐式和双浮点到显式转换。虽然链接问题的答案对提问者有价值,但答案并不准确。是的,“重复”真的很糟糕!我同意。我不会说它是复制品。另一个问题解释了如何做,这个问题是关于什么时候它可能有用。我明白了。它用于提醒开发人员明智地使用用户定义类型之间的转换,而显式转换的实施告诉开发人员“您正在使用的转换可能会导致丢失原始数据”。谢谢lot@ZhuShengqi:_您正在使用的转换可能会导致丢失原始数据u这可能是真的,但不一定是真的。由于我没有机会发表我自己的答案,我将尝试解释这一点,如果这里没有几句话。例如,如果为了方便起见想创建一个帮助器类,比如一个更好的颜色类,它可以像.net结构一样被序列化和反序列化,并且可以在任何地方使用它,那么可以使用隐式操作。你可以正常使用颜色结构,你可以扩展你的BetterColor,使其能够隐式地强制转换到/从颜色。@t3chb0t:非常感谢。您的意思是,隐式转换还可以使派生类在细化旧项目和其他情况下更易于重用。非常感谢你!