1.泛型和泛型强制转换
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace VS2005Demo2
6{
7
8 C# 编译器只允许将泛型参数隐式强制转换到 Object 或约束指定的类型#region C# 编译器只允许将泛型参数隐式强制转换到 Object 或约束指定的类型
9 public interface ISomeInterface
10 { }
11 class BaseClass
12 { }
13 class MyClass<T> where T : BaseClass, ISomeInterface
14 {
15 void SomeMethod(T t)
16 {
17 ISomeInterface obj1 = t;
18 BaseClass obj2 = t;
19 object obj3 = t;
20 }
21 }
22 #endregion
23
24 编译器允许您将泛型参数显式强制转换到其他任何接口,但不能将其转换到类#region 编译器允许您将泛型参数显式强制转换到其他任何接口,但不能将其转换到类
25 class SomeClass
26 { }
27 //class MyClass1<T>
28 //{
29 // void SomeMethod(T t)
30 // {
31 // ISomeInterface obj1 = (ISomeInterface)t; //Compiles
32 // SomeClass obj2 = (SomeClass)t; //Does not compile
33 // }
34 //}
35 #endregion
36
37
38 使用临时的 Object 变量,将泛型参数强制转换到其他任何类型#region 使用临时的 Object 变量,将泛型参数强制转换到其他任何类型
39 class MyClass2<T>
40 {
41 void SomeMethod(T t)
42 {
43 object temp = t;
44 SomeClass obj = (SomeClass)temp;
45 }
46 }
47 #endregion
48
49 使用is和as运算符#region 使用is和as运算符
50 public class MyClass3<T>
51 {
52 public void SomeMethod(T t)
53 {
54 if (t is int) { }
55 if (t is LinkedList<int, string>) { }
56 string str = t as string;
57 &n
