C#基础1
1. ref和out:
ref与out是很特殊的两个关键字。使用它们,可以使参数按照引用来传递。
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
区别:
out 参数在进入方法(函数)时后清空自己,使自己变成一个干净的参数,也因为这个原因必须在方法返回之前或再使用out参数前为 out 参数赋值(只有地址没有值的参数是不能被.net接受的);
ref参数是不需要在被调用方法使用前先赋值的,甚至也可以被调用方法中不改变ref参数的 值,这都不会引起编译错误。
ref参数在使用前必需初始化,而out不需要。
out参数只进不出,ref参数有进有出。
用法上概括一下就是:out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
2.sealed,new,virtual,abstract,override
sealed,不能继承,不能重写,当应用于方法和属性时,sealed必须和override一起使用
new,现实隐藏基类的成员,在子类调用是new新定义出来的,不是基类的方法
virtual,虚成员,可以由子类中的方法重写更改,不能将virtual和static,abstract,override一起使用
abstract,抽象,可以继承,只能在抽象类中使用抽象方法,不能被实例化,不提供实际实现,没有方法体
override,重写,重写基类方法必须是抽象的,虚拟的,重写的
3.private,protected,public,internal的区别
private,是私有的,只能在类内部调用,子类不能继承private的属性和方法
protected,自己和自己的子类可以调用
public,对任何类成员完全开放,无限制
internal,同一个引用程序集内部,不是解决方案