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 = "";
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[], a[]));
myDic.person.sayName();
Console.ReadKey();
}
}

继承泛型接口

11.泛型委托的使用:

   public delegate int myDelegate<T,X>(T x,X y);
class test
{
public static void Main(String[] args)
{ test t1 = new test();
myDelegate<int,string> del = t1.add;
Console.WriteLine(del(t1.add(,""),t1.addString(,"")));
Console.ReadKey(); }
public int add(int x, string y)
{
return x + y.GetHashCode();
}
public string addString(int x, string y)
{
return x.ToString() + y;
}
}

泛型委托

12.泛型的运算符重载,需要注意:不能用泛型未知类作为重载返回类型,而且双目运算符之间的操作,参数也不能是类型相同的泛型类,总之感觉实现很复杂。但是肯定运算符是可以重载的。

13.泛型类的占位符可以和该泛型类中定义的泛型方法的占位符相同,但是最好不要这样。否则一旦你的泛型类实例化时和你的泛型方法实例化时的类型不一致或者无法做出隐式类型转换时,就会出现错误。

C#&java重学笔记(泛型)的更多相关文章

  1. C#&java重学笔记(面向对象)

    C#部分 1.C#有一个internal关键字,指字段可以同一个程序集中访问,出了程序集不行.还有一个protected internal(没有先后之分)修饰词,指只能在同一个程序集中的子类访问 2. ...

  2. C#&java重学笔记(变量与操作符)

    声明:自用参看读物 C#部分 1.C#中的byte和sbyte并不是二进制的比特,而是无符号 和 有符号的 8位整数. 2.decimal和float double都用来表示小数,前者用e的10的几次 ...

  3. C#&Java重学笔记(集合比较和转换)

    C#部分: 1.C#中集合有三种,数组类,ArrayList,和字典键值对类,一般也可以自定义集合,但是自定义集合的类型也只有这三类. 2.自定义集合实现三类集合的方法:前两者需要继承Collecti ...

  4. C#&java重学笔记(函数)

    C#部分  1.写在函数定义的()中的关键字: a.params关键字:用来满足函数的参数为数组时,而数组的长度不固定的情况.且该关键字只能用来修饰数组型参数.这样一修饰,就达成了类似JavaScri ...

  5. 重学Java泛型

    一丶从字节码层面看范型擦除 public class Type1<T> { private T t; } 使用jclasslib插件查看其字节码: 可以看到 t属性的类型是List< ...

  6. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  7. Java集合类简单总结(重学)

    java集合类简介(重学) 一.Collection(集合).Map接口两者应该是平行关系吧. 1.Map介绍 Map是以键值(key-value)对来存放的,2个值.通过key来找到value(例: ...

  8. Java笔记--泛型总结与详解

    泛型简介: 在泛型没有出来之前,编写存储对象的数据结构是很不方便的.如果要针对每类型的对象写一个数据结构,     则当需要将其应用到其他对象上时,还需要重写这个数据结构.如果使用了Object类型, ...

  9. 重学Java(一):与《Java编程思想》的不解之缘

    说起来非常惭愧,我在 2008 年的时候就接触了 Java,但一直到现在(2018 年 10 月 10 日),基础知识依然非常薄弱.用一句话自嘲就是:十年 IT 老兵,Java 菜鸡一枚. 于是,我想 ...

随机推荐

  1. JSAPI_Ticket签名

    1.微信 JS 接口签名校验工具 2.具体开发 2.1 获取access_token,然后jsapi_ticket /** * 获取access_token,然后jsapi_ticket */ pri ...

  2. mybatis数据库基本配置包括数据源事物类型等

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC ...

  3. EXCEL处理数据小技巧

    1.EXCEL 中如何获得4*8这个数字中,*号前面的数字 输入  =LEFT(AC2,FIND("*",AC2)-1) 获得*右边的数字 输入 =RIGHT(AC2,FIND(& ...

  4. iOS学习之事件处理

    一.事件的基本概念      1.事件概述 事件是当用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序的对象. 系统将事件按照特定的路径传递给可以对其进行处理的对象. 在iOS汇总,一个UITo ...

  5. thinkphp用phpexcel读取excel,并修改列中的值,再导出excel,带往excel里写入图片

    <?php class GetpriceAction extends AdministratorAction { // 文件保存路径 protected $savepath; // 允许上传的文 ...

  6. SQL Server数据库学习笔记-概念数据模型

    概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具. ...

  7. QT中实现中文的显示与国际化

    1 增加头文件    #include "QTextCodec" 2 在文件中增加如下内容 QTextCodec::setCodecForTr(QTextCodec::codecF ...

  8. mini2440 linuxi2c驱动

    #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #inclu ...

  9. 一、IRIG-B 概念

    参考:http://baike.baidu.com/view/3601618.htm http://wenku.baidu.com/view/7956cd29bd64783e09122bf1.html ...

  10. JavaScript美术馆进化史

    内容选自<<JavaScript DOM 编程艺术>>第4-6章,跟着作者一起见证美术馆的进化吧. 先放效果图,然后一步步做出每个效果.每个效果都有它实用的地方,且知道过程可以 ...