您的位置:首页 > 其它

Tip3 区别对待强制转型as和is

2017-07-31 17:02 155 查看
Tip3 区别对待强制转型as和is

如果类型之间都上溯到了某个共同的基类,那么根据此基类进行的转型应该使用as。子类于子类之间的转型,则应该提供转型操作符,以便进行强制转型

class FirstType
{
public string Name { get; set; }
}

class SecondType
{
public string Name { get; set; }
public static explicit operator SecondType(FirstType firstType)
{
SecondType secondType = new SecondType() { Name = "转型自:" + firstType.Name };
return secondType;
}
}

FirstType firstType = new FirstType() { Name = "First Type" };
SecondType secondType = (SecondType)firstType;         //转型成功
//secondType = firstType as SecondType;     //编译期转型失败,编译不通过

static void DoWithSomeType(object obj)
{
//SecondType secondType = (SecondType)obj;//若传入参数为FirstType对象,会引发异常
//因为编译器运行时会检查obj是不是SecondType,绕过了转换操作符
SecondType secondType = obj as SecondType;
if (secondType != null)
{
// do someting
}
}


若FirstType是SecondType的基类,则as和强转都可以用

//is的用法
static void DoWithSomeType(object obj)
{
if (obj is SecondType)
{
SecondType secondType = obj as SecondType;
//do something
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: