C#-泛型应用实例

原创文章地址为:

http://www.cnblogs.com/jewleo/archive/2009/06/13/06130921_1.html

泛型方法

方法可以定义特定于其执行范围的泛型参数,如下所示:

public class MyClass
{
    //指定MyMethod方法用以执行类型为X的参数
    public void MyMethod(X x)
    {
        //
    }


    //此方法也可不指定方法参数
    public void MyMethod()
    {
        //X x;
    }
}

     注意 属性 索引器 不能指定自己的泛型参数,它们只能使用所属类中定义的泛型参数进行操作。
    在调用泛型方法的时候,你可以提供要在调用场所使用的类型,如下所示:
//调用泛型方法
MyClass myClass = new MyClass();
myClass.MyMethod(3);
  泛型推理 :在调用泛型方法时,C#编译器足够聪明,基于传入的参数类型来推断出正确的类型,并且它允许完全 省略 类型规范,如下所示:
//泛型推理机制调用泛型方法
MyClass myClass = new MyClass();
myClass.MyMethod(3);
 注意 泛型方法无法只根据返回值的类型推断出类型,代码如下:
public GenericMethodDemo()
     {        
        MyClass myClass = new MyClass();
        /****************************************************
        无法从用法中推理出方法“GenericMethodDemo.MyClass.MyMethod()”的类型参数。
        请尝试显式指定类型参数。
        ***************************************************/
        int number = myClass.MyMethod();//有错误
     }

    public class MyClass
    {
        public T MyMethod() 
        {
            //
        }
    }
泛型委托
    在某个类中定义的委托可以使用该类的泛型参数,代码如下
public class MyClass
{
    public delegate void GenericDelegate(T t);
    public void SomeMethod(T t)
    {

    }
}
public void GenericMethodDemo()
{
    MyClass obj = new MyClass();
    MyClass.GenericDelegate del;
    del = new MyClass.GenericDelegate(obj.SomeMethod);
    del(3);
}
委托推理 :C#使你可以将方法引用的直接分配转变为委托变量。将上面的代码改造如下

//委托推理
 del = obj.SomeMethod;
 del(3);

泛型委托的约束
委托级别的约束只在声明委托变量和实例化委托时使用,类似于在类型和方法的作用范围中实施的其他任何约束。
在.Net当中,扩展了反射以支持泛型参数。类型Type现在可以表示带有特定类型的实参(或绑定类型)或未指定类型的泛型(或称未绑定类型)。C#中,您可以通过使用typeof运算符或通过调用每个类型支持的GetType()来获得任何类型的Type。代码如下:
 LinkedList list = new LinkedList();
 Type type1 = typeof(LinkedList);
 Type type2 = list.GetType();
 Response.Write(type1 == type2);
typeof和GetType()也可以对泛型参数进行操作,如下
public class MyClass
{
    public void SomeMethod(T t)
    {
        Type type = typeof(T);
        HttpContext.Current.Response.Write(type==t.GetType());
    }
}





你可能感兴趣的:(C#-泛型应用实例)