C# 强制类型转换和普通对象一样,泛型类的对象也可以采用强制类型转换转换成另外的泛型类型,不过只有当两者在各个方面兼容时才能这么做。C# 编译器只允许将一般类型参数隐式强制转换到 Object 或约束指定的类型,如下面代码块所示。这样的隐式强制类型转换是类型安全的,因为可以在编译时发现任何不兼容性。
创新互联是专业的达川网站建设公司,达川接单;提供成都网站建设、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行达川网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
C# 强制类型转换与C# 泛型实例演示:
代码块
一般类型参数的隐式强制类型转换
- interface ISomeInterface
- {...}
- class BaseClass
- {...}
- class MyClass where T : BaseClass,ISomeInterface
- {
- void SomeMethod(T t)
- {
- ISomeInterface obj1 = t;
- BaseClass obj2 = t;
- object obj3 = t;
- }
- }
编译器允许您将一般类型参数显式强制转换到其他任何接口,但不能将其转换到类:
- interface ISomeInterface
- {...}
- class SomeClass
- {...}
- class MyClass
- {
- void SomeMethod(T t)
- {
- ISomeInterface obj1 = (ISomeInterface)t;//Compiles
- SomeClass obj2 = (SomeClass)t; //Does not compile
- }
- }
但是,您可以使用临时的 Object 变量,将一般类型参数强制转换到其他任何类型:
- class SomeClass
- {...}
- class MyClass
- {
- void SomeMethod(T t)
- {
- object temp = t;
- SomeClass obj = (SomeClass)temp;
- }
- }
不用说,这样的显式强制类型转换是危险的,因为如果为取代一般类型参数而使用的类型实参不是派生自您要显式强制转换到的类型,则可能在运行时引发异常。要想不冒引发强制类型转换异常的危险,一种更好的办法是使用 is 和 as 运算符,如代码块 6 所示。如果一般类型参数的类型是所查询的类型,则 is 运算符返回 true;如果这些类型兼容,则 as 将执行强制类型转换,否则将返回 null。您可以对一般类型参数以及带有特定类型实参的一般类使用 is 和 as。
C# 强制类型转换与C# 泛型实例:
代码块
对一般类型参数使用“is”和“as”运算符
- public class MyClass
- {
- public void SomeMethod(T t)
- {
- if(t is int)
- {...}
- if(t is LinkedList)
- {...}
- string str = t as string;
- if(str != null)
- {...}
- LinkedList list = t as LinkedList;
- if(list != null)
- {...}
- }
- }
C# 强制类型转换与C# 泛型相关的内容就向你介绍到这里,希望对你了解和学习C# 强制类型转换与C# 泛型有所帮助。
【编辑推荐】
文章题目:C# 强制类型转换与C# 泛型浅析
新闻来源:http://www.mswzjz.cn/qtweb/news35/144335.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能