C# 强制类型转换与C# 泛型浅析

开发 后端
C# 强制类型转换与C# 泛型理解直接影响到对C# 泛型的理解和学习,那么对于C# 强制类型转换与C# 泛型需要掌握哪些内容呢?本文就向你介绍详细的内容。

C# 强制类型转换和普通对象一样,泛型类的对象也可以采用强制类型转换转换成另外的泛型类型,不过只有当两者在各个方面兼容时才能这么做。C# 编译器只允许将一般类型参数隐式强制转换到 Object 或约束指定的类型,如下面代码块所示。这样的隐式强制类型转换是类型安全的,因为可以在编译时发现任何不兼容性。

C# 强制类型转换与C# 泛型实例演示

代码块

一般类型参数的隐式强制类型转换

  1. interface ISomeInterface  
  2. {...}  
  3. class BaseClass  
  4. {...}  
  5. class MyClass where T : BaseClass,ISomeInterface  
  6. {  
  7.    void SomeMethod(T t)  
  8.    {  
  9.       ISomeInterface obj1 = t;  
  10.       BaseClass      obj2 = t;  
  11.       object         obj3 = t;  
  12.    }  

编译器允许您将一般类型参数显式强制转换到其他任何接口,但不能将其转换到类:

  1. interface ISomeInterface  
  2. {...}  
  3. class SomeClass  
  4. {...}  
  5. class MyClass   
  6. {  
  7.    void SomeMethod(T t)  
  8.    {  
  9.       ISomeInterface obj1 = (ISomeInterface)t;//Compiles  
  10.       SomeClass      obj2 = (SomeClass)t;     //Does not compile  
  11.    }  

但是,您可以使用临时的 Object 变量,将一般类型参数强制转换到其他任何类型:

  1. class SomeClass  
  2. {...}  
  3.  
  4. class MyClass   
  5. {  
  6.      
  7.    void SomeMethod(T t)  
  8.      
  9.    {  
  10.       object temp = t;  
  11.       SomeClass obj = (SomeClass)temp;  
  12.      
  13.    }  

不用说,这样的显式强制类型转换是危险的,因为如果为取代一般类型参数而使用的类型实参不是派生自您要显式强制转换到的类型,则可能在运行时引发异常。要想不冒引发强制类型转换异常的危险,一种更好的办法是使用 is 和 as 运算符,如代码块 6 所示。如果一般类型参数的类型是所查询的类型,则 is 运算符返回 true;如果这些类型兼容,则 as 将执行强制类型转换,否则将返回 null。您可以对一般类型参数以及带有特定类型实参的一般类使用 is 和 as。

C# 强制类型转换与C# 泛型实例:

代码块

对一般类型参数使用“is”和“as”运算符

  1. public class MyClass   
  2. {  
  3.    public void SomeMethod(T t)  
  4.    {  
  5.       if(t is int)  
  6.       {...}   
  7.  
  8.       if(t is LinkedList)  
  9.       {...}  
  10.  
  11.       string str = t as string;  
  12.       if(str != null)  
  13.       {...}  
  14.  
  15.       LinkedList list = t as LinkedList;  
  16.       if(list != null)  
  17.       {...}  
  18.    }  

C# 强制类型转换与C# 泛型相关的内容就向你介绍到这里,希望对你了解和学习C# 强制类型转换与C# 泛型有所帮助。

【编辑推荐】

  1. C# 泛型实现理解及实例浅析
  2. C# 泛型应用及优点浅析
  3. 浅析C# 泛型约束中的一般约束
  4. C# 泛型约束之派生约束浅析
  5. 浅析C# 泛型约束中的构造函数约束
责任编辑:仲衡 来源: MSDN
相关推荐

2009-08-24 14:51:25

C# 泛型泛型类型

2009-08-24 18:15:24

C# Dictiona

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 17:27:05

C#泛型应用

2009-08-24 16:39:19

C# 泛型应用

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 11:35:20

C# 泛型应用

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 10:37:27

C# 泛型

2009-08-24 13:31:38

C# 泛型约束

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 10:07:57

C#泛型处理

2013-03-20 09:27:33

C#泛型

2009-08-24 14:26:42

C# 泛型类

2009-08-24 16:01:44

C# 泛型

2009-08-24 16:19:42

C# 泛型方法

2009-08-26 09:36:03

C#泛型

2009-08-24 13:41:23

C# 泛型约束

2009-09-11 12:41:41

C#类型转换
点赞
收藏

51CTO技术栈公众号