C# 隐式和显式铸造的优缺点
我知道隐式和显式铸造是什么。现在我有一个问题,我找不到满意的答案C# 隐式和显式铸造的优缺点,c#,C#,我知道隐式和显式铸造是什么。现在我有一个问题,我找不到满意的答案 与显式转换相比,隐式转换有哪些优点和缺点 这很简单: 优点:更方便 缺点:更复杂的类型系统,由于意外的强制转换而导致的错误源 隐式强制转换必须始终有效,而显式强制转换可能会引发异常。隐式强制转换更方便,因为在强制转换时不必添加显式强制转换。但是,您可能希望选择显式强制转换,以便向开发人员清楚地表明强制转换已经完成 隐式转换很少使用,因为它降低了代码的可读性。显式强制转换更具可读性,但不太方便 最后,根据我的经验,最具可读性的方法
- 优点:更方便
- 缺点:更复杂的类型系统,由于意外的强制转换而导致的错误源
最后,根据我的经验,最具可读性的方法是提供
ToTargetType
方法,除了使用时的可读性之外,IDE中的方法列表也可以很容易地发现这些方法(要查看转换运算符,您需要查看类的源代码)。对于变量:
interface IFooBar
{
void MakeABarrelRoll();
}
隐式转换使开发人员每次都不必提及类型。它对于数字数据类型很有用:
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
}
}
我们可以直接从object调用它:
FooBar foobar = new FooBar();
foobar.MakeABarrelRoll(); //Works
FooBar foobar = new FooBar();
//foobar.MakeABarrelRoll(); //Does not work
((IFooBar)foobar).MakeABarrelRoll(); //Works
显式接口实现仅当对象被显式强制转换到接口时才使其方法打开
class FooBar: IFooBar
{
public void IFooBar.MakeABarrelRoll()
{
//Make a barrel roll here
}
}
我们可以不直接从object调用它:
FooBar foobar = new FooBar();
foobar.MakeABarrelRoll(); //Works
FooBar foobar = new FooBar();
//foobar.MakeABarrelRoll(); //Does not work
((IFooBar)foobar).MakeABarrelRoll(); //Works