c#2.0的新功能(二):泛型的其他的一些信息

一、泛型的转换

1、可以隐式转换到object以及派生约束指定的类。

class MyClass<T> where T BaseClass , ISomeInterface

T可以转换到object , BaseClass , ISomeInterface。

2、显式转换,可以转换到接口,不能显示转换到类,是类型不安全的。

3、解决方法:

a. object temp=t;SomeClass obj =(SomeClass)temp;

b.用 is 和 as

if ( t is LinkedList<int ,string>){...}

LinkedList<int,string> list = t as LinkedList<int ,string>; if ( t != null){...}

二、继承

1、定义

public class BaseClass<T>

public class SubClass:BaseClass<int>

public class SubClass<T>:BaseClass<T>

2、子类继承父类时,必须把约束放到子类的后面

public class BaseClass<T> where T :ISomeInterface

public class SubClass<T>:BaseClass<T> where T :ISomeInterface

三、泛型不支持+ , +=,因为没有办法加运算符约束。解决方法:使用泛型抽象类和泛型接口。

1、泛型抽象类

public abstract class BaseClass<T>

{

         public abstract T add( T arg1 , T arg2 );

}

public class SubClass :BaseClass<int>

{

         public override int add( int arg1 , int arg2 );

         {

                    return arg1  + arg2 ;

         }

}

2、泛型接口同上,就不写了。

四、泛型方法,实例方法和静态方法都是一样的,可以单独给泛型方法参数。特性类不能用泛型。

1、定义

public class MyClass<T>

{

         public void MyMethod<X>(X x){...}

}

public class MyClass2

{

         public void MyMethod<T>(T t){...}

         public T MyMethod2<T>(){...}

}

2、使用

MyClass2 myClass = new MyClass2 ();

myClass .MyMethod<int>(3);

myClass .MyMethod(3);//可以省略

myClass .MyMethod2();//不能编译

3、可以使用约束,但是子类的复写方法不能再加约束。

五、泛型委托和事件

1、定义

public class MyClass<T>

{

        public delegate void GenDelegate(T t );

         public void SomeMethod(T t);

}

2、实现

MyClass<int> obj = new MyClass<int>;

MyClass<int>.GenDelegate()  del;                //委托居然是用类引用的,很意外啊。

del = new MyClass<int>.GenDelegate(obj.SomeMethod);

del = obj.SomeMethod; //也可以

del(3);

3、也可以用约束。

 六、反射,也可以使用typeof , GetType()。

1、还可以用typeof(MyClass<>)表示空的,多个的话用LinkedList<,>。

Type 类中有些比较重要的方法:

Type[] GetGenericArguments();//泛型的参数信息

 Type[] GetGenericParameterConstraints();//泛型的约束

Type GetGenericDefinition();//泛型的定义信息

bool IsGenericType();//是不是泛型类型

2、MethodInfo和MethodBase

methodInfo.Invoke( list , args);

七、泛型集合,定义了多个泛型的类和接口。

八、不能在WebService使用泛型,不能在Com使用泛型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值