C#学习笔记一 对象和类型
最近在学习c#,做一些笔记。
1、对象和类型
类和结构
区别:类是存储在堆上的引用类型,结构是存储在堆栈上的值类型。访问方式、结构不支持继承。较小的结构可提高性能。
都可以用new来声明实例。
1.1类成员
类中的数据和函数称为类的成员。
数据成员:字段、常量(const)、事件
函数成员:方法、属性、构造函数、终结器(析构函数)、运算符、索引器。
方法:
1、给方法传递参数
参数可以通过引用或值传递给方法,在变量通过引用转递给方法时,被调用的方法得到的就是这个变量,所以在方法内部对变量进行的任何改变在方法退出后仍旧发挥作用。而如果变量是通过值传递的,被调用的方法得到的是变量的一个副本,也就是说,在方法退出后,对变量的改变会丢掉。对复杂的数据类型,按引用传递的效率更高,因为按值传递时要复制大量的数据。
要使按值传递的参数按引用方式传递可以使用ref out关键字
他们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
他们的适合场合:
out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。参考:http://www.cnblogs.com/hubj/archive/2008/12/24/1361811.html
2、方法的重载
声明同名但参数个数或类型不同的方法即可。
注意:
两个方法不能仅在返回类型上有区别。
两个方法不能仅根据参数是声明为ref还是out来区分。
构造函数
如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。
如果将构造函数定义为private或protected.则外部代码就无法通过new实例化该类,这在下面两种情况下是有用的:
1)类仅用作某些静态成员或属性的容器,因此永远不会实例化
2)希望类仅通过某个静态成员函数来实例化(所谓对类实例化的类代理方法)
静态构造函数
通常在第一次调用类的成员之前执行
构造函数初始化器
3、只读字段
readonly比const关键字灵活的多。只读字段可以在构造函数中赋值,但不能在其他地方赋值。可以结合静态构造函数初始化一些变量。如有一个编辑文档的程序,因为要注册,需要限制可以同时打开的文档数,可以定义一个字段表示这个最大的文档数,这个字段必须是只读的。每次安装程序时,从注册表或其他文件读入
public class DocumentEditor
{
public static readonly uint MaxDocuments;
static DocumentEditor()
{
MaxDocuments = 读数据();
}
}
4、结构
结构是值类型,不是引用类型,他们存储在堆栈中火存储为内联。
结构的构造函数。编译器总是提供一个无参数的构造函数,这是不允许替换的。
不允许定义无参数的构造函数。
5、部分类
partial关键字允许把类、结构、接口放到多个文件中。
6、静态类
不能创建静态类的实例
7、Object类
所有类的基类
ToString()
GetHashTable()
Equals()
Finalize()
GetType()