摘要: 谈谈使用public static class bbbb1{ public static void aaaa1_bbbb() { }}public class aaaa1{ public delegate void aaaa(); public event aaaa bbbb; public void abc() { //使用在这里 bbbb += aaaa1_bbbb; bbbb += (new aaaa1()).aaaa1_bbbb; bbbb += bbbb1.aaaa1_bbbb; //貌似也... 阅读全文
posted @ 2011-09-03 20:49 CallMeTommy 阅读(226) 评论(0) 推荐(0)
摘要: 先看委托。 然后事件 当然可耻的直接用了书的源码。首先.. 委托就和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... 阅读全文
posted @ 2011-08-28 23:48 CallMeTommy 阅读(214) 评论(0) 推荐(0)
摘要: 关于属性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; } } //... 阅读全文
posted @ 2011-08-20 23:42 CallMeTommy 阅读(121) 评论(0) 推荐(0)
摘要: 不可避免在初始化子类的时候 常常会遇到swich的时候class a { }class b:a { public void a() {}}class c:a { public void b() {}} 一种写法..class a { public virtual void c() {}}class b:a { public override void c() { a(); } public void a() {}}class c:a { public void b() {}public override void c() { b(); }} 阅读全文
posted @ 2011-08-18 20:59 CallMeTommy 阅读(133) 评论(0) 推荐(0)
摘要: 关于可选参数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语法糖. 她对我 阅读全文
posted @ 2011-08-17 23:43 CallMeTommy 阅读(128) 评论(0) 推荐(0)
摘要: 关于构造器和类在初始化类的时候,分配的内存对象总是归零, 所有字段 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 阅读全文
posted @ 2011-08-04 22:31 CallMeTommy 阅读(143) 评论(0) 推荐(0)
摘要: 关于常量const首先常量必须是 基元类型常量会在 程序集中的元数据中, so 他不用分配内存常量会隐式的定位 static常量值 不能修改,任何形式都不能修改~关于字段1.static 静态2.readonly 相对于常量来说 他可以在构造的时候修改, 当然用反射几乎什么都能改..3.volatile 这玩意儿真没用过PS:作者在这里说: 字段储存在动态内存中,这点比较迷惑.理论上说,类应该放在托管堆上面. so 类得字段的内存也应该分配在托管堆上面, 所以此处的 动态内存是否等于托管堆 本人要打一个问号class a{ private int a = 0;}虽然这里看起来是内联初始化,其实 阅读全文
posted @ 2011-07-27 22:52 CallMeTommy 阅读(123) 评论(0) 推荐(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; } 阅读全文
posted @ 2011-07-27 21:07 CallMeTommy 阅读(513) 评论(0) 推荐(0)
摘要: 关于基元类型其实丫就是编译器提供的简便方法,类似int, var 之类的,当然 var 是深得我心。 少打了好多字~int i; 编译器在编译的时候 就会变成 System.Int32 a = new System.Int32();这些都是编译时候做的 所以没有损失PS: 那人不推荐用基元类型。意思大概是造成的歧义~ 比如不同编译器(不过... 谁会用其他编译器呢)关于值类型和引用类型老生常谈~值类型: 放在线程栈上面的.不受垃圾回收的控制, 那玩意儿快. 因为栈的机制问题,上文中说过引用类型:放在托管堆上的. new 之后会返回在堆上面的内存地址~这里那人提到了引用类型的开销问题:1.内存在 阅读全文
posted @ 2011-07-20 22:02 CallMeTommy 阅读(161) 评论(0) 推荐(0)
摘要: 二是有的!所有类型都是从System.Object派生var o = System.Object;o的方法Equals : 判断是否相同GetHashCode:得到一个hash码 也算是唯一标识吧ToString:理论上是返回 String,重载专用GetType:获取对象信息, 从安全考虑,非虚方法上述为公开方法下面是保护MemberWiseClone: 创建一个新的实例,就是复制一个玩意儿 但是返回一个新的引用,引用的地址不一样~ (这段待查)Finalizd: 垃圾回收~ 但是一般不会调用 New1. 计算对象所需要的字节数(包含类型对象指针[tpye object pointer] 和 阅读全文
posted @ 2011-07-19 09:44 CallMeTommy 阅读(200) 评论(0) 推荐(0)