真正的重载:两个带不同个数的类型参数的泛型方法构成重载(overload)
泛型方法的类型参数和方法参数列表都是构成重载的元素。
子类重写父类方法的是方法体实现代码,而不是方法签名。
2.3 协变和逆变
(本质是子类对象转父类对象,父类对象转子类对象)
1.由子类向父类方向转变是协变,协变用于返回值类型用out关键字。
out 关键字,该关键字表明T类型是可能要做协变的
2.由父类向子类方向转变是逆变,逆变用于方法的参数类型用in关键字
in 关键字,这关键字作用是告诉编译器在对委托赋值时类型T可能要做逆变。
编译过程
mscorlib里面包含着string,int等基本类型
程序(应用程序域)里的程序集(也就是程序跑起来时用到的程序集)。
每一个方法对应在MethodInfo对象
每一个属性对应在PropertyInfo对象
全局变量(字段)对应FieldInfo对象
事件对应EventInfo
对于正在运行的程序域来说,并不是所有的外部添加的程序集引用在运行的时候会立即加载到当前的程序域中,
而是当代码里有使用到外部引用的程序集的时候,才会被JIT加载进来。
补充:局部变量永远不可能并发。
容易并发的有:全局变量、静态变量和硬盘里的数据、网络。
Activator.CreateInstance可以创建无参构造的类对象。
无参与有参不一样。
通过这个技术,大家看出来,所有私有、公有是针对谁而来的?
1.针对编译器而来的。编译器负责语法检查和IL编译。
2.运行时是没有私有、公有约束,只要你的代码能编译通过,他就直接执行。
3.程序员写代码必须按照C#语法写,语法规定不允许访问对象的私有成员,所以编译器会按照这个去检查,则编译器不通过。