随笔分类 - clr via c#
摘要:首先说明是反射,为什么要使用反射反射提供的是一种封装程序集、模块和类型的对象。通过反射可以动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 这是官方的定义,反射往往是针对未知的东西,扩展,兼容。常说,反射性能差 为什么还要使用反射:1. 机能 现在的机器 大都是双核了,机能已经不是 多少年前能比了。2. 如果使用反射能简化程序代码,或者能有更好的可读性,扩展性. 那么确实可以不用去在意那么一点性能损失3. 使用反射往往都是在 程序初始化,或者不常用的地方。System.Type 类型。使用反射 必不可少的玩意儿Type 为 Sy.
阅读全文
摘要:异常 1 try 2 { 3 //要捕获的代码 4 } 5 catch (Exception ex) 6 { 7 //如果上面的代码段缩了 做什么 8 } 9 finally10 { 11 //不管错没错 都要做得12 }关于throw 1 public static void Main() 2 { 3 try 4 { 5 a(); 6 } 7 catch (Exception ex) 8 ...
阅读全文
摘要:其实关于书上提到的数据空中 可以为空的值类型这个问题我基本没有遇到过= =默认值这玩意儿很重要啊.在数据空中所有 值类型都应该是 不能为空 设置下比如 -1 之类的标志位就ok了System.Nullable // 摘要: // 表示基础类型为值类型的对象,值类型与引用类型一样也可以分配 null。 // // 类型参数: // T: // System.Nullable<T> 泛型类型的基础值类型。 [Serializable] [TypeDependency("System.Collections.Generic.Nulla...
阅读全文
摘要:十四 跳~枚举enum a { white = 1, black = 2 }一些方法 名称说明 CompareTo 将此实例与指定对象进行比较并返回一个对二者的相对值的指示。 Equals 返回一个值,该值指示此实例是否与指定的对象相等。 (重写 ValueType.Equals(Object)。) Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) Format 根据指定格式将指定枚举类型的指定值转换...
阅读全文
摘要:其实接口就语法来说 基本没什么可说的/// <summary>/// 接口的命名 最好以 Ixxxx 开头 算是规范吧/// 定义返回值 和 参数 不能实现方法/// 不能定义字段 但是 可以定义属性/// </summary>interface Iaaa{ //string aaa; 这样会报错 void aaa(string aa); string bbb { set; } //可以定义属性}/// <summary>/// 接口可以继承接口 /// 但是这里作者说 接口的继承和普通的继承不是一样/// 是契约形式 这里我也说不清楚 /// </s
阅读全文
摘要:为什么要使用泛型性能优势 : 免去了装箱拆箱。 这个节省可不是一般的大啊..如果类型将操作值类型,那么就会产生装箱和拆箱操作,使用泛型能防止装箱和拆箱操作。泛型的强类型检查有助于快速查找错误代码简洁 : N个类的东西一个泛型类搞定.. 跟容易维护和编写安全。 当然你得写的兼容性差... 传什么都能执行那就完了缺点代码简洁 : 这是一把双刃剑, 大量使用泛型类 会使代码的可读性变得非常差 非常不容易维护关于性能其实书上比较了性能说的也比较清楚这里也有一篇关于 姐夫赵的 泛型真的会降低性能吗我就不在这里多做赘述了,泛型虽说提升不大 但是至少不会带来性能损失泛型的协变逆变 这个系列完成之后 会专门去
阅读全文
摘要:先看委托。 然后事件 当然可耻的直接用了书的源码。首先.. 委托就和js中得回调一样,别人都用c举例...本人只能用js举例。。。。 ╮(╯▽╰)╭function a(func){ var el= document.body; func(el)}function b(el) { do something.. }a(b); 委托也是这样.. 不过要麻烦很多.internal delegate void Feedback(Int32 value); 先定义public static void Main(){ Counter(1, 3, new Feedback(FeedbackToCo...
阅读全文
摘要:关于属性public class a{ public int age;}var a = new a();age = 5;你就直接赋值了,当然作者十分反对这样做, 她违反了OO思想的一个原则就是 数据封装比如一个不熟悉代码的程序员.. age = 2000;这个时候属性就出场了。 各种限制.class aaa { private int _a = 5; public int a { get { return a; } } //丫只读 private int _b; public int b { set { _b = value; } } //...
阅读全文
摘要:关于可选参数public void a(string a ="ssss"){}然后a(); a= ssss应该是编译器功能 因为我记得在2010上选用 2.0还是能通过.. so 性能问题没了注意事项1 public void a(string a ="ssss",string b){} //不允许 a(null,"aaa"); 这样调用起来多么恶心2 默认值必须是常量 public void a(int i = n + j){} //恩哼3 不能用ref out, 因为... tm为嘛要这样做4 其他可忽略。。var语法糖. 她对我
阅读全文
摘要:关于构造器和类在初始化类的时候,分配的内存对象总是归零, 所有字段 0 or null构造器不能被继承,也就是说 不能加virtual之类的在构造器上如果基类没有显示构造类,那么子类就直接这样写就完了class a {}class b:a { public b() {}}反之class a { public a(int i) {}}class b:a{ public b(int j,int i):base(i) {}}其实就算你显示的声明构造器,编译器也会生成一个默认构造器(static,sealed,abstract除外...)当然构造器和方法一样。 随你写多少个class a { int
阅读全文
摘要:关于常量const首先常量必须是 基元类型常量会在 程序集中的元数据中, so 他不用分配内存常量会隐式的定位 static常量值 不能修改,任何形式都不能修改~关于字段1.static 静态2.readonly 相对于常量来说 他可以在构造的时候修改, 当然用反射几乎什么都能改..3.volatile 这玩意儿真没用过PS:作者在这里说: 字段储存在动态内存中,这点比较迷惑.理论上说,类应该放在托管堆上面. so 类得字段的内存也应该分配在托管堆上面, 所以此处的 动态内存是否等于托管堆 本人要打一个问号class a{ private int a = 0;}虽然这里看起来是内联初始化,其实
阅读全文
摘要:类型的各种成员讲到了很多C#基本类型,当然确实比较基础...private const int n = 1; //常量private readonly int n = 1; //只读字段private static int n = 1; //静态字段//类型构造器static a()//实例构造器public a()public string a1() //实例方法public static a2() //静态方法public int i { get { return 0; } set {} } //属性public int this[string s] { get { return 0; }
阅读全文
摘要:关于基元类型其实丫就是编译器提供的简便方法,类似int, var 之类的,当然 var 是深得我心。 少打了好多字~int i; 编译器在编译的时候 就会变成 System.Int32 a = new System.Int32();这些都是编译时候做的 所以没有损失PS: 那人不推荐用基元类型。意思大概是造成的歧义~ 比如不同编译器(不过... 谁会用其他编译器呢)关于值类型和引用类型老生常谈~值类型: 放在线程栈上面的.不受垃圾回收的控制, 那玩意儿快. 因为栈的机制问题,上文中说过引用类型:放在托管堆上的. new 之后会返回在堆上面的内存地址~这里那人提到了引用类型的开销问题:1.内存在
阅读全文
摘要:二是有的!所有类型都是从System.Object派生var o = System.Object;o的方法Equals : 判断是否相同GetHashCode:得到一个hash码 也算是唯一标识吧ToString:理论上是返回 String,重载专用GetType:获取对象信息, 从安全考虑,非虚方法上述为公开方法下面是保护MemberWiseClone: 创建一个新的实例,就是复制一个玩意儿 但是返回一个新的引用,引用的地址不一样~ (这段待查)Finalizd: 垃圾回收~ 但是一般不会调用 New1. 计算对象所需要的字节数(包含类型对象指针[tpye object pointer] 和
阅读全文

浙公网安备 33010602011771号