C#学习笔记
可空类型:int ?a=0;a可以为空,test??100(若test为空则返回右边的值,否则返回test) int? a=15(非->可空,隐式转化) b=(int)a(可空->非,强制转化)
局部变量和参数位于栈上
Ø 输出:System.console.write("{0},{1},{2}”,a,b,c)
Ø 隐式类型:var,在声明变量时无需指定类型,如:var a=10(编译时会自动转化为int),要注意的是:var类型的值必须是局部变量和静态变量,var类型在声明之前必须被初始化,var类型值不能为null,var类型不能为一个方法或者方法组,不能用来声明参数类型。
Ø 在类中,在不加任何访问修饰符的情况下默认是隐式私有的
Ø 从类的外部访问要设置访问修饰符为public,从内部访问可以为任何类型
ü c#中的默认访问权限:1.在namespace中的类、接口默认是internal类型的,也可以显示的定义为public类型,不允许是其他访问类型。2.在一个类里面,属性和方法默认是private的,可以显示的定义为public、private、protected、internal或protected internal等访问类型。3.接口中不能定义成员变量,接口中的方法默认为public的访问权限,但是不能显示的定义任何访问类型。4.抽象类中必须有一个以上的抽象方法,抽象方法可以是public、internal、protected,不能是private的访问类型。(intenal->程序集中访问)。
ü 隐式初始化:初始化的时候不赋予初值,如inta;
ü 本地常量:constint a=1;(声明)->只读变量
ü 方法调用:可以在一个方法中调用其他方法
ü 参数:值参数(实参,形参),引用参数(使用ref修饰符,如:MyMethod(ref a)->指向相同的内存空间,必须使用变量,作为实参之前必须被赋值)输出参数(使用out修饰符,使用同一块空间,每个输出参数在函数正常返回前都必须明确赋值)如:MyMethod(refint a,out int b){a++,b=9}->>main(){MyMethod(ref a,out b)},数组参数:void a(params int[] vals) 定义数:int[] a=new int[6],a[1]=1(循环赋值),二维数组:int[,] a=new int[2,3]{{1,2},{1,2}}
ü sizeof():sizeof(int)后面可接类型名称
ü 方法重载,命名参数:a(inta,int b) main->a(b:5,a:8) 可选参数a(inta,int b=9)
ü static:静态变量在初始化时会首先初始化为该类型的默认值,再赋值;如:static int i=9,初始化时现给i分配int型的空间值为0,再赋值为9,static变量只占据一份内存空间,且他的值是可以改变的
ü 常量:const,没有自己的存储位置,而是在编译时被编辑器替代。
ü 构造函数:默认构造函数(无参构造器),有参构造函数,静态构造函数(构造函数前面加上static)
ü 对象初始化列表:public class haha{public inta=0;} main->haha l=new haha{a=9}
析构函数:~+类名,只能有一个。
publicclassBaseResource: IDisposable
{
~BaseResource()
{
// 为了保持代码的可读性性和可维护性,千万不要在这里写释放非托管资源的代码
// 必须以Dispose(false)方式调用,以false告诉Dispose(bool disposing)函数是从垃圾回收器在调用析构函数时调用的
Dispose(false);
}
// 无法被客户直接调用
// 如果 disposing 是 true, 那么这个方法是被客户直接调用的,那么托管的,和非托管的资源都可以释放
// 如果 disposing 是 false, 那么函数是从垃圾回收器在调用Finalize时调用的,此时不应当引用其他托管对象所以,只能释放非托管资源
protectedvirtualvoidDispose(bool disposing)
{
// 那么这个方法是被客户直接调用的,那么托管的,和非托管的资源都可以释放
if(disposing)
{
// 释放托管资源
OtherManagedObject.Dispose();
}
//释放非托管资源
DoUnManagedObjectDispose();
// 那么这个方法是被客户直接调用的,告诉垃圾回收器从Finalization队列中清除自己,从而阻止垃圾回收器调用析构函数方法.
if(disposing)
GC.SuppressFinalize(this);
}
//可以被客户直接调用
publicvoidDispose()
{
//必须以Dispose(true)方式调用,以true告诉Dispose(bool disposing)函数是被客户直接调用的
Dispose(true);
}
}
ü readonly:修饰符,用于类中的成员,this:指向当前对象的引用
ü get/set属性:可以且只可以一个带访问修饰符,且其级别要高于方法本身
publicclass person
{
public String Name { get; private set; }
public int a;
public person(String name){
Name=name;
}
public int ivalue
{
private set { a=value; }
get { return a; }
}
}
ü 索引(在namespace之外的class可以用get/set属性)
hellottt = new hello();
ttt[1] = "2";
System.Console.Write(ttt[1]);
publicclass hello
{
public int a, b, c;
public String this[int index]
{
set
{
switch(index){
case 0: a = int.Parse(value);break;
case 1: b = int.Parse(value);break;
case 2: c = int.Parse(value);break;
}
}
get
{
switch (index)
{
case 0: return a.ToString();
case 1: return b.ToString();
case 2: return c.ToString();
default: return"default";
}
}
}
}
ü 继承:classB:classA->B继承A(派生类不能删除它所继承的任何成员),派生类可以访问父类的成员(除private)