隐含和明确的铸造优点和缺点

时间:2013-12-29 09:53:14

标签: c#

我知道隐式和显式转换是什么。现在我有一个问题,我无法找到满意的答案。

  1. 隐式转换比显式转换有什么优缺点?

5 个答案:

答案 0 :(得分:1)

这很简单:

  • 优势:更方便
  • 缺点:更复杂的类型系统,由于意外演员而导致的错误来源

答案 1 :(得分:1)

隐式转换更方便,因为您不必在转换时添加显式转换。但是,您可能希望选择显式转换以向开发人员清楚地表明转换已完成。

答案 2 :(得分:1)

对于变量

隐式转换使开发人员不必每次都提及类型。它对数字数据类型很有用:

Int32 integerNumber = 20;
Decimal decimalNumber = integerNumber; //It is OK

但是 - 您应该只使用显式转换,其中转换完全不同的类型:

CustomString customString = "This is custom string";
//Int32 customStringLength = customString; //It is NOT OK
Int32 customStringLength = (Int32)customString; //It is OK

对于接口

interface IFooBar
{
    void MakeABarrelRoll();
}

隐式接口实现允许所有代码“看到”其方法:

class FooBar: IFooBar
{
    public void MakeABarrelRoll()
    {
        //Make a barrel roll here
    }
}

我们可以直接从对象中调用它:

FooBar foobar = new FooBar();
foobar.MakeABarrelRoll(); //Works

显式接口实现只有在对象明确地转换为接口时才会打开它的方法。

class FooBar: IFooBar
{
    public void IFooBar.MakeABarrelRoll()
    {
        //Make a barrel roll here
    }
}

我们可以直接从对象中调用它:

FooBar foobar = new FooBar();
//foobar.MakeABarrelRoll(); //Does not work
((IFooBar)foobar).MakeABarrelRoll(); //Works

答案 3 :(得分:0)

隐式转换必须始终有效,而显式转换可能会引发异常。

答案 4 :(得分:0)

很少使用隐式转换,因为它会降低代码的可读性。显式转换更具可读性,但不太方便。

最后,根据我的经验,最可读的方法是提供ToTargetType方法,除了使用时的可读性之外,还可以通过IDE中的方法列表轻松发现(查看您需要查看的转换运算符)课程的来源)。