c#高级编程第六版读书笔记
1.对象方法参数传递
参数可以通过引用或值传递给方法,在变量通过引用传递给方法时,被调用的方法将得的就是这个变量,所以在方法内部对变量进行的任何改变在方法退出后仍旧发挥作用.而如果变量是通过值传递给方法的,被调用的方法得到的是变量的一个副 本,也就是说大方法退出后,.对一次量进行的修改会丢失.注意字符串是不同的.因为字符串是值不能改变的.在方法调用中,对字符串所做的任何改变都不会影响原来的字符串.
如
public void action(int i,intp[] list)
{...}
在方法内部对i进行的修改不会影响到外部变量,对list所做的更改会影响到外部变量
通过值传送变量是默认的.也可以迫使参数通过引用传递给该方法,为此.要使用ref关键词
2.构造函数
系统默认的构造函数只能把成员字段初始化为标准的默认值(如果字段在类内部已初始化,则不重新初始化),如:引用类型为空引用(=null),数值类型为0,bool型为false.
3.只读字段
常量的概念就是包含一个不能修改的值的变量,但是,常量不必满足所有的要求,有时可能需要一些变量,其值不能改变,但在运行之前其值是未知的.c#可用只读字段(readonly)解决.
4.继承与重写
把一个基类函数声明为virtual,同样适用于属性,该函数就可以在派生类中重写了.
class MybaseClass
{
public virtual string VirtualMethod()
{
return "this method is virtual and defined in mybaseclass"
}
}
继承
class myDrivedClass:MybaseClass
{
public override string VirtualMethod()
{
return "..."
}
}
如果签名方法在基类或派生类中都进行了声明.但该方法没有声明virtual和override,派生类就会隐藏基类方法(书96页),可用new关键词隐藏基类方法.如:
class MybaseClass
{
public string VirtualMethod()
{
return "this method is virtual and defined in mybaseclass"
}
}
继承
class myDrivedClass:MybaseClass
{
public new string VirtualMethod()
{
//在继承方法中可用base关键字调用基类方法.如:
// return base.virtualmethod()+"ok";
return "..."
}
}
5.派生类构造函数(第100页)
不论类继承多少次,构造函数的调用顺序是先调用system.obejct.再按照层次结构自上向下进行.直到到达编译器要实例化的类为止,还要注意在这个过程中,每个构造函数都初化始它自己类中的字段,这是它的一般工作方式.也就是说基类的构造函数总是最先调用,派生类的构造函数可以在执行过程中调用它可以访问的基类方法.
在编译器试图为派生类创建构造函数时,默认两个类的构造函数必须具有相同的签名.
如果签名不同,则需用base关键字指定执行的构造函数
6.接口
接口不能有构造函数或字段,接口定义也不允许包含运算符重载,在接口定义中还不允许有声明成员上的修饰符,接口成员总是公共的,不能声明为虚方法或静态方法