c#基础,私有构造函数,值类型与引用类型,静态构造函数 电脑版发表于:2014/10/11 17:20 ####私有构造函数 tn2>特点:不能在外面直接实例化 作用:可以限制创建的对象,因为外面无法创建对象,创建对象是通过静态方法来的,我们可以在方法里边进行一些限制,比如只允许同时存在一个对象。比如单例模式需要这样设计。 ####值类型与引用类型 tn4##值类型与引用类型的区别? 对象是属于值类型还是引用类型?,对象是引用类型 int是属于值类型还是引用类型?,int是值类型 tn4##字符串是属于值类型还是引用类型? 字符串是引用类型,<font color='red'>但是是一个特殊的引用类型</font> **特殊在哪里?** <font color='red'>字符串内容是不可变的</font>,如果你把内容改变了,根本就不是同一个字符串了,而是重新创建的一个。 tn4#字符串的错误用法 **字符串的拼接效率问题:** 如果在大量拼接字符串的时候会不会有效率问题?会存在效率问题 **怎么解决?** 使用操作字符串的对象StringBuilder。这个对象用于使用字符串拼接的,使用这个对像的append方法可以做字符串拼接但是不会重新去创建对象。 <br/> ###静态 **加上static关键字就是静态的** 静态类: 静态方法: 主函数是一个静态函数 静态字段: 静态属性: **静态方法和实例方法:** 静态方法可以直接调用普通方法嘛?静态方法不能直接调用普通方法 普通方法可以直接访问静态方法嘛?普通方法可以直接访问静态方法 静态方法可以直接调用静态方法嘛?可以 **静态成员特点:** 1:静态成员先于非静态创建 2:静态成员只有一份 **静态成员的访问方式:** 非静态成员:使用对象.非静态成员 静态成员 : 类名.方法名 **为什么静态方法不能直接访问普通方法:** 创建顺序的问题:静态方法创建的时候,非静态方法还没有出生,还不存在,所以无法直接访问 **为什么普通方法可以直接访问静态方法:** 因为静态方法先创建,且只创建一份,当普通方法存在的时候静态方法一定是存在的,所以可以直接调用。 **静态类特点:** 静态类能不能被实例化?不能 静态类能不能包含普通方法或者普通的属性、字段?不能 **静态成员的执行顺序:** 静态字段-->静态构造函数-->主函数(主函数也是静态的) 如下面一个经典的例子: ``` class A { public static int X; static A() { X = B.Y + 1; } } class B { public static int Y = A.X + 1; static B() { } static void Main() { Console.WriteLine("X={0},Y={1}", A.X, B.Y); } } ``` 很多人都以为先执行的是主函数,其实不是的,应该是最先执行主函数所在类的静态字段也就是的这句:public static int Y = A.X + 1; 然后执行主函数所在类的静态构造函数: static B() { } 最后才是执行的主函数