C#复习

Assemblies

文件名和类名可以不一样。


C#大小写敏感,@可以把关键字变成标识符,也可以原来忽略转义。


类型:

值类型:bool ,char ,sbyte,short,int,long,byte,ushort,uint,ulong,float,double,decimal,enums,structs.

引用类型:class,interface,arrays,delegates

值类型分配在栈上,初始化为0,false,'\0',复制时复制值。

引用类型分配在堆上,初始化为null,复制时复制值的引用。

枚举


数组


int[] a = new int[3];
            Console.WriteLine(a.Length);     // 3
            int[][] b = new int[3][];
            b[0] = new int[4];
            Console.WriteLine("{0}, {1}", b.Length, b[0].Length);      // 3, 4
            int[,] c = new int[3, 4];
            Console.WriteLine(c.Length);     // 12

            Console.WriteLine("{0}, {1}", c.GetLength(0), c.GetLength(1));  // 3, 4

注意Arrays.copy(a,b,t)将a的前t个复制到b的前t个。

int[] a1 = { 7, 2, 5 };
            int[] b1 = new int[2];
            Array.Copy(a1, b1, 2);    // copies a[0..1] to b

            Array.Sort(b1);

string

可以通过s[i]访问第i-1个元素,引用类型,但可以通过==或!=来判断值是否相等。

a.compareto(b),a<b则返回-1,a=b返回0,a>b返回1.

struct

不论什么时候,编译器都会给结构体一个默认无参构造器,也会拒绝你给它的无参构造器,所以这里说结构体无参构造器没有不太好,意思懂了就行。类就不一样了,你不给它它就自己造一个无参构造器,你给它一个构造器(不论有参无参),它就不管了,不给你默认无参构造器了。



Boxing(装箱):值类型转换为引用类型

Unboxing(拆箱):引用类型转换为值类型


typeof返回给定类型的类型说明符。

sizeof返回类型的字节数,只能用于值类型,只能用在unsafe块。

除局部变量,名称的使用可以先于声明。


switch case,可以用int,enum,string,char类型。

结构体内的字段在声明时不能初始化。const类型声明时必须初始化,常量不能为静态

out与ref参见https://blog.csdn.net/susan19890313/article/details/6841541






内部类可以访问外部类的所有成员,即使是private

外部类只能访问内部类的public成员

其它的类只能访问public的内部类。

嵌套的类型可以是structs,enums,interfaces和delegates


类只能继承自一个基类,但可以继承自多个接口

结构体不能继承也不能被继承。

as运算符用于改变类型,失败则为null类型。

方法只有声明为virtual才能在子类中重写。

静态方法不能被重载。


new打断继承


protected:子类和本类中可见

internal:程序集中可见

protected:它所在的程序集、本类和子类中可见。


抽象方法不能实现。

抽象方法隐含是virtual。

含有抽象方法的类是抽象类。

抽象类不能被实例化。


密封类不能被继承,但可以继承自其他类。

重写方法也必须声明为密封的,并且它的方法不能被virtual修饰。



如果==被重载,那么!=也要被重载


类可以继承自一个基类,但可以实现多个接口,结构体不能继承自任何类型,但可以实现多个接口。

实现接口的方法不能声明为重写,但可以为抽象。



方法可以是静态的,委托不是静态的。如果方法是静态的,那么类名必须表示出来。


异常:


注意异常的参数名在catch中可以省略。继承自system.Exception类。

C#可以不捕捉异常。如果没有捕捉,程序将终止aborted


第一种情况,F捕捉了异常,那么Main未捕获异常,就会调用H

第二种情况,F未捕获异常,而Main可以捕获EXC2,所以H不运行。


namespace是类型的容器,可以嵌套多个namespace,可以被别的文件调用。






属性和字段区别参见:https://blog.csdn.net/xwchen2017/article/details/64132065

多线程:



并不需要thread类的子类,任何无参void方法都可以作为线程启动。

如果终止线程,finally仍然会被执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值