1、值类型包含实际的数据,不能是null,值类型的变量总是有一个值,可能是0
值类型:枚举(enum)、结构(struct)和原类型
2、装箱:值类型到引用类型
拆箱:引用类型到值类型
应避免不必要的装箱操作,在调用那些将执行隐式装箱的方法之前亲自对值进行装箱
3、访问修饰符
public:公共的,所有类都能访问,可以在定义类和派生类之外访问
protected:只能由派生类访问,在类之外是不可见的
private:私有的,只能在定义类中访问(不能在定义此成员的类之外访问它,即使是派生类也不能访问此成员)
internal:只在当前编译单元中可见
若没有为成员指定访问修饰符,则默认被声明为private。
4、Main方法作为应用程序的入口点,必须被定义为静态的,且可以在任何类中定义,对应用程序无影响!
static public void Main()
5、构造函数
base():调用当前类的基类构造函数,基类中有可能存在多个构造函数,调用基类构造函数时只能使用静态成员
this():调用当前类中的另一个构造函数
在派生类构造函数中的任何语句被执行之前调用基类的构造函数,这个规则确保了基于(派生自)其他类的类代码被执行之前得到正确的初始化
6、const常量字段默认就是静态(static)的,只读字段(readonly)只能在构造函数中进行初始化,此后任何地方都不能修改
7、c#不支持通过派生实现多重继承,但是可以实现多个接口,在c#中实现多重继承的唯一方法是通过适用接口。
8、如果希望一个类不能被作为基类使用(不能被继承),就在定义这个类时适用sealed关键字,但抽象(virtual)类除外,抽象类的本质决定他们必须作为基类使用
9、结构struct:结构的成员可以是构造器、常量、字段、方法、特性、索引器、操作符以及嵌套的类型,不必对结构进行实例化,但是,不能为结构创建无参数的构造函数,不能
初始化其字段。
struct RGB
{
public int Red;
public int Green;
public int Blue;
}
RGB rgb;
rgb.Red = 0xFF;
rgb.Green = 0xFF;
rgb.Blue = 0XFF;
10、使用ref关键字之前,必须在调用方法之前对传递的参数进行初始化。
out关键字:不要求调用代码先对传递的参数进行初始化,必须在被调用的方法内修改out参数(给其赋值),在参数时引用类型的情况下,必须为参数赋值,不只是为参数中的
某些字段赋值,也不仅仅是进行一些修改,在为out参数赋值之前不能使用它!
而ref参数可以被修改,也可以不被修改。
通过引用(ref)传递值类型,通过引用传递引用类型
通过值传递引用,实际上是在传递引用的副本,这个引用指向原始数据
而通过引用传递引用,实际上是在传递原来的引用
11、方法重载:ref和out修饰符可以使方法能区别于方法的其他版本,但是编译器将ref和out视为是相同的,这意味着可以通过使用ref和out来修改特定的参数以提供重载,但是
不能同时使用这两个修饰符
http://www.w3school.com.cn/sql/sql_func_avg.asp