Tip3 区别对待强制转型as和is
2017-07-31 17:02
155 查看
Tip3 区别对待强制转型as和is
如果类型之间都上溯到了某个共同的基类,那么根据此基类进行的转型应该使用as。子类于子类之间的转型,则应该提供转型操作符,以便进行强制转型
若FirstType是SecondType的基类,则as和强转都可以用
如果类型之间都上溯到了某个共同的基类,那么根据此基类进行的转型应该使用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 } }
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议3: 区别对待强制转型与as和is
- 建议3 区别对待强制转型与as和is
- 建议3: 区别对待强制转型与as和is
- 编写高质量代码改善C#程序的157个建议[正确操作字符串、使用默认转型方法、却别对待强制转换与as和is]
- C# is\as与强制转换的区别+值类型与引用类型转换区别
- C#中的is和as的转型区别
- C#中is与as关键字的区别
- IT忍者神龟之oracle存储过程中is和as区别描述
- 记SQL语句中的as和is的区别
- is与as的区别
- C#中is 和 as 的区别
- C#中 is 和 as 的区别
- Oracle中 UNION和UINON ALL的区别,IS和AS的区别(简单介绍,以后逐渐详细)
- (转)AS3中 is,as,typeof的区别 .
- .NET 里as 与is 的区别和用途
- C#中is与as的区别分析
- C#中is、as的区别
- as 和 is的区别
- is 和 as的区别
- as 和is的区别