关于构造器和类

在初始化类的时候,分配的内存对象总是归零, 所有字段 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 i=1;
}
其实这玩意儿在看了IL代码后, 其实他也是构造实例化的..
自身显示申明的构造器,在他之后执行

  

关于结构的构造器

结构的构造是比较搞的..

比如

struct aa //丫会报错 你不能直接实例化
{
int i = 0;
}

struct aa //aa 必须传参数..
{
  
int i;
public aa()
{
}
}


struct aa //你丫也不能这样实例化..
{
  
int i;
  int b;
public aa(int j)
{
    i
= j;
}
}

想实例化 值是不可能的了,顶多这样

struct aa //什么都不传,他默认赋值~
{
  
int i;
}

或者

struct aa //什么都不传,他默认赋值~
{
  
int i;
  
public aa(int j)
  {
    
this = aa(); //丫也不报错
  }
}
其实大概就是这样...
~
我对于结构的使用是非常少. 因为我不觉得他能带来性能上的提升
怎么说. 比如结构中包含值类型怎么办,他还是放在线程栈上面? 恐怕是放在托管堆上面了吧
摊手

类型构造器

对于类型构造器,那使用的更少...

类型构造器你不用过去调用它,他自己会被clr调用.. 反正会先使用它,在你其他任何方法之前(包括其他构造函数);

默认私有

PS: 作者在这里提示,不要在结构中使用类型构造器,因为他有可能出不来

当然 相互引用这种事儿最好别干..

关于性能

第一次调用自然要消耗大一点,毕竟他要判断你是否是第一次.

以后调用就没问题了,编译器知道你已经被调用,自然就不会生成调用

操作符重载方法

比如 string + string,这个加就重载了的...
clr 规定重载操作符的方法 必须public
+ static
来一个例子

public class a
{
public static a operator+(a a1,a a2) { 这里面就可以写你想干什么了 }
}
这样就把
+ 重载了

PS: 操作符我想不必深究。。 毕竟这玩意儿基本用不到 他顶多带来语法上的简便 仅此而已..

转换操作符方法

个人感觉和操作符一样,最大的意义就是操作简便。
关于规则
同样还是
public static 必须的!
implicit 隐式
explicit 显式~
有兴趣的自己研究一下吧.. 这里就带过了

扩展方法

同上.. 还是操作简便. 不过个人感觉这个方法提升很多操作的空间,这个用起来就好用太多
很多自定义的静态方法.. 就直接用了
public static class aaaa {
public static string Add(this string oldstr, string newstr)
{
return oldstr + newstr;
}
}
这样 你就能直接调用
"".Add("加上了") 啊哈~

PS:
扩展方法,就跟他名字一样.. 他只支持方法
非泛型静态类
至少得有个参数
比如 扩展方法写在 data 程序集下,那你在其他程序集中想用。 using data~

个人感觉以上的 类似语法糖的玩意儿意义不是很大..  

posted @ 2011-08-04 22:31  CallMeTommy  阅读(137)  评论(0编辑  收藏  举报