首页 > 代码库 > C#&java重学笔记(泛型)

C#&java重学笔记(泛型)

C#部分:

1.泛型的出现主要用于解决类、接口、委托、方法的通用性,通过定义泛型类、接口、委托、方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发。

2.利用System.Nullable<T>泛型可以生成可空的值类型变量,值类型的可空泛型可以简写为关键字加问号,如:int? val=new int?();

3.关于布尔类型的泛型可空& |操作,我们可以知道,如果关心不关心操作数是否为空就能得出结果,那么空值就是无所谓的。

4.可空的泛型值类型的HashValue属性值为true false,当该变量为空时,则HashValue为false。(HashValue和HashCode不是一回事,HashValue是泛型特有的

5.可空泛型变量拥有特殊双目运算符:??,也叫做空接合运算符,val1??val2等价于 val1=val1==null?:val2;

6.泛型类有最基本的两类:List<T>和Dictionary<K,V>,(尖括号里表示类型的字母可以随便写)。前者表示顺序链表,后者表示键值和值的映射集合。当然我们也可以自己定义自己的泛型类,当然泛型类也会有禁忌:我们不能假定泛型T是哪种类型,所以也就不能进行针对的操作,这一切需要我们在声明泛型对象的时候才能揭晓。例如你不能用T类型重载+运算符。比如:

public class add<X>
    {
        public X op1;
        public Type returnValue()
        {
            return this.op1.GetType();
        }
    }
    
    
    class test
    {
        
        public static void Main(String[] args)
        {
            add<string> a = new add<string>();
            a.op1 = "10";
            Console.WriteLine(a.returnValue());
            Console.ReadKey();
        }
    }
泛型类

7.可以对泛型类的T进行约束,比如 public myTClass<T1,T2> where T1:class,interface,struct,基类名(访问性比T还要高的基类),new()(表示约束为有构造函数的公共基类函数,必须写在约束项的最后面)where T2:class,当然了,如果该泛型有继承的话,那么这些约束要写在继承后面:public myTClass<T>:IComparer<T> where T:class。

8.default关键字在泛型中用于确定T类型对象的初始化的值,如果T是值类型,那么初始化为0,如果T为引用类型,那么T对象初始化为null。例子如下:

public class add<X>
    {
        public X op1;
        public X returnValue()
        {
            X c=default(X);
            return c;
        }
    }
       
    class test
    {
         public static void Main(String[] args)
        {
            add<int> k = new add<int>();
            Console.WriteLine(k.returnValue());//输出0
            add<object> ks = new add<object>();
            Console.WriteLine(ks.returnValue());//输出null
            Console.ReadKey();
        }
    }
default关键字的使用

9.普通类如果继承泛型类,会出现错误,而如果继承的是约定好了类型的泛型类,比如 public class myClass:List<int> 则可以成立

10.泛型接口的应用于泛型类的继承,比如以下的例子:

public class com<T> :IComparer<T>
    {
        public int Compare(T x, T y)
        {
            int k = x.GetHashCode() - y.GetHashCode();
            return k;
        }
    }
   
    class test
    {
        
        public static void Main(String[] args)
        {
            string[] arr = new string[] {"a","b","c" };
            List<string> a = new List<string>();
            a.AddRange(arr);
            com<string> k = new com<string>();
            Console.WriteLine(k.Compare(a[0], a[1]));
            myDic.person.sayName();
            Console.ReadKey();
        }
    }
继承泛型接口