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. C基础 那些年用过的奇巧淫技

    引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲 ...

  2. 019C#中使用移位运算符获取汉字编码值

    在进行移位运算时,当数值的二进制数每次向左移1位就相当于乘以2,当数值每次向右移一位就相当于除以2 private void button1_Click(object sender, EventArg ...

  3. poj 2631 Roads in the North

    题目连接 http://poj.org/problem?id=2631 Roads in the North Description Building and maintaining roads am ...

  4. 通过Roslyn构建自己的C#脚本

    通过Roslyn构建自己的C#脚本 在下一代的C#中,一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为一种可在代码中调用的服务.最 ...

  5. libevent I/O示例

    I/O示例使用一个windows平台上服务器/客户端的例子来演示.由于为了减少代码篇幅等各种由于本人懒而产生的原因,以下代码没有做错误处理以及有些小问题,但是我想应该不影响演示,大家多包涵. 服务器代 ...

  6. Linux 进程(一):环境及其控制

    进程环境 main启动 当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序将此启动例程指定为程序的起始地址,接着启动例程从内核中取出命令行参数和环境变量值,然后执行main函数. ...

  7. Timer Design in StatusBar

    Timer in StatusBar we need to show local time in StatusBar. solution: 1. add textblock control 2. bi ...

  8. Linux Shel高级技巧(目录)

    Linux Shell高级技巧(一) http://www.cnblogs.com/stephen-liu74/archive/2011/12/22/2271167.html一.将输入信息转换为大写字 ...

  9. MyEclipse下直接查看class文件 jadnt158下载

    在没有源文件的情况下,通过倒入两个jar文件就可以实现 文件链接:http://pan.baidu.com/share/link?shareid=372924537&uk=2435113113 ...

  10. Android -- View

    setContentView                                                                        只要你使用过Activity ...