1.关键字ABSTRACT
abstract关键字是用于创建抽象类或抽象成员方法的修饰符,当用于修饰成员方法的时候,成员方法是没有方法体的,只有其方法的声明部分。格式如下:
abstract class Test
{
    
public abstract void show();
    
public void write()
    {
        Console.WriteLine(
"这里是抽象类里面的非抽象成员");
    }
}

2.方法签名
方法签名是指:方法的名称,参数的数量和参数的类型这三部分,不包含返回类型。可以通过不同的方法签名来重载一个方法。

3.重载方法的规则
a.每个重载的方法必须有一下一个或多个不同(参数数量、参数类型、参数顺序)
b.每个重载的方法应该使用相同的名称,否则视为新方法
c.不能重载带有相同属性名称的方法,反之亦然


4.参数
参数分为按值传递和按引用传递,默认是按值传递,如果要使用按引用传递需使用关键字ref或out,而参数的类型又分为值类型和引用类型,所以可以组合出4种参数传递方式:
a.按值方式传递值类型参数
b.按值方式传递引用类型参数
c.按引用方式传递值类型参数
d.按引用方式传递引用类型参数

5.默认访问修饰
类:如果不是嵌套的类,命名空间或编译单元内的类只有public和internal两种修饰,默认的是internal。
成员方法:有5种修饰符,默认为private,构造函数是特殊的成员方法。

6.构造函数
a.和类同名 b.没有返回类型 c.可以重载 d.一般用于对象的初始化

7.程序语句
C#是面向对象的语言,所有的程序语句都封装在类的方法里,而不能像面向过程的语言那样,可以单独存在于其他地方。下面的例子中被注释掉的语句都是错误的写法。
//int[] array3;
//array3 = new int[2];
public class Infunction
{
    
//int[] array3;
    
//array3 = new int[2];
    public void test()
    {
        
int[] array3;
        array3 
= new int[2];
    }
}


8.使用静态构造函数的要点
a.静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
b.是在创建第一个类实例或任何静态成员被引用之前,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了,而且最多只运行一次。
c.一个类只能有一个静态构造函数。
d.无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
e.静态构造函数不可以被继承。
f.如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。

9.一个类由及部分构成
一个类主要由两部分构成,数据成员和函数成员
数据成员包括:字段,常量,事件.
函数成员包括:方法,属性,构造函数,析构函数,运算符,索引器.

10.属性的访问修饰符
在C#2.0中允许为get和set设置不同的访问级别,但必须遵循相关规则.
a.get和set访问器中必须有一个和属性访问级别相同(不用显示声明,否则会显示编译错误),而另一个的访问级别必须小于属性的访问级别.
b.当给属性的get和set访问器定义不同的访问级别的时候,在索引器中也应该定义统一的访问级别.
c.不能在接口中分别设置不同的访问修饰符.

11.浅拷贝和深拷贝
浅拷贝和深拷贝的区别就好比方法参数的传值参数和传引用参数的区别.
深拷贝:是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响.
浅拷贝:是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同),对其中任何一个对象的改动都会影响另外一个对象.


12.嵌套类的实例化方式
如果类B是类A的嵌套类,那么请用下面的方式进行实例化
A.B b = new A.B();
这是A就相当于B的命名空间.

13.继承的规则
a.继承是可以传递的.如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,也继承了A中的成员.Object类作为所有类的基类.
b.派生类应当是对基类的扩展.派生类可以添加新的成员,但不能除去已经继承的成员的定义.
c.构造函数和析构函数不能被继承.除此以外的其他的成员,不论对他们定义了怎样的访问方式,都能被继承.基类的访问方式只能决定派生类能否访问他们.
d.派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员.但这并不因为这派生类删除了这些成员,只是不能在访问了.
e.类可以定义虚方法,虚属性以及虚索引器,他的派生类能够重载这些成员,从而实现编译时的多态性.


14.值类型和引用类型在内存中的分布规律
a.引用类型总是分布在托管堆上.
b.值类型分配在它声明的地方.作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上.

15.const 和 static readonly 区别

const: 用const修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序 static readonly: 用static readonly修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化 。