C#学习笔记整理1

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:指向当前对象的引用

ü getset属性:可以且只可以一个带访问修饰符,且其级别要高于方法本身

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可以用getset属性)

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)

猜你喜欢

转载自blog.csdn.net/Alpha_Paser/article/details/74332578