zoukankan      html  css  js  c++  java
  • 泛型

    定义:通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率。

    泛型的好处 

    1、同样的代码,可以通过任何类型来重用它,减少重复代码

     2、编译器支持和类型安全 

    3、不会强行对值类型进行装箱和取消装箱,或者对引用类型进行向下强制类型转换,性能提高。


    泛型继承:
    1、泛型类继承中,父类的类型参数已被实例化,这种情况下子类不一定必须是泛型类;
    2、父类的类型参数没有被实例化,由子类指定,也就是说父类和子类都是泛型类,并且二者有相同的类型参数;


    泛型写法:
    泛型类

    public class TestChild : Test< string, int>{ }  
    
    public class TestChild< T, S> : Test< T, S> { }  
    
    public class TestChild< T, S> : Test< String, int> { } 

    泛型方法:C#的泛型机制只支持在方法申明上包含类型参数,也即是泛型方法

    public T getvalue<T>(T t)
    {
        return t;
    }
    使用:  
    Int a =  getvalue<Int>(10); 

    泛型接口:

    public interface IList<T>
    {
        T[] GetElements();
    }

    泛型委托:

    public class MyClass<T>
    {
        public delegate void GenericDelegate(T t);
        public void SomeMethod(T t)
        { 
        }
    }
    
    public GenericMethodDemo()
    {
        MyClass<int> obj = new MyClass<int>();
        MyClass<int>.GenericDelegate del;
        del new MyClass<int>.GenericDelegate(obj.SomeMethod);
        del(3);
    }

    泛型约束:C#中的泛型只支持显示的约束,因为这样才能保证C#所要求的类型安全,但显示的约束并非时必须的,如果不加约束,泛型类型参数将只能访问System.Object类型中的公有方法。“显式约束”由where子句表达,可以指定“基类约束”,“接口约束”,“构造器约束”,“值类型/引用类型约束”共四种约束

    构造器约束:

    public static T CreateObject<T>(out int objectId) where T : new() 
    public class CSingleton<T> where T : new() 

    基类约束,还包括基类和接口:

    public T FindControl<T>(string name) where T : Component
    public class CSingleton<T> where T : IComparable

    值约束:

    public class MyClass<T> where T : struct { }

    引用约束:

    public class MyClass<T> where T : class { }

    约束组合:

    public class MyClass<T> where T : IComparable, new() { }
    public class MyClass<T> where T : struct, IComparable { }
    public class MyClass<T> where T : B, IComparable, ICloneable { }
    public class MyClass<T, U> where T : IComparable  where U : class { } 
    约束 说明
    T:struct 类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型。与接口约束同时使用,在最前面(不能与基类约束,构造函数约束一起使用)
    T:class 类型参数必须是引用类型,包括任何类、接口、委托或数组类型。
    T:new() 类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。
    T:<基类名> 类型参数必须是指定的基类或派生自指定的基类。
    T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
    T:U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。这称为裸类型约束.
  • 相关阅读:
    TWaver中文社区 » 关于
    RedMon Redirection Port Monitor
    dust good
    HiSpider(Hitask) is a fast and high performance spider with high speed
    42qu.com 找到给你答案的人
    yet another 牛人
    Simple Map Reduce at home
    China (googlegroups) [CPyUG:78205] 基于Python的MapReduce算法的快速构建框架
    retools 0.1 : Python Package Index
    Bloomfilter 的应用场景 黄刚的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8321344.html
Copyright © 2011-2022 走看看