C#笔记3

1.C#中也有抽象类,用abstract修饰,里面含有用abstract修饰的方法:

abstract class A

{

   public abstract void F();

}

abstract class B: A

{

   public void G() {}

}

class C: B

{

   public override void F() {

      // actual implementation of F

   }

}

2.装箱(boxing)和取消装箱(unboxing)

可以把任何对象赋值给Object(c#和c++一样支持赋值兼容),但把值类型赋给引用类型时,涉及到装箱和取消装箱。

  Object obj = 1;//装箱,在堆中申请一个对象,把1装到堆中

  也可显式装箱:

  Object obj = (Object)1;

  例子:

  int i = 123;

  object o = i;

  i = 456;//o仍然是123,应为o的实际值在堆上,和i不在同一个地方。

  取消装箱:

 int j = (int)o//把堆上的值拷贝到栈上,也可隐式unboxing

3.string类型不可改变,要是想用可变的字符串,请使用StringBuider

4.out,ref使参数引用传递

 out:可以把一个未初始化的值传递

 ref:必须是先初始化,再作为参数传递

 成员变量不可和out一起传递

 out,ref两者不参与区分重载

 out/ref和没有out/ref区分重载

调用和声明时都要写out/ref关键字

   5.

void changeArray(int[] arr)

   {

       arr = new int[2]{1,2};

   }

   void Test()

   {

     int theArray = new int[2]{0,0};

     changeArray(theArray);//返回后theArray还是{0,0},因为changeArray中的arr指向了另一个数组

 }

         因为引用变量也是值传递的

    如果changeArray写成

    void changeArray(ref int[]  arr)

    则theArray会变成{1,2},因为引用变量也是引用传递了

  6.class必须用new定义object,但可以先声明,如:

   class1 a;

   a = new class1();

   7.struct声明变量时不用struct关键字

 

8.arry的声明:

   int[] arrTemp = {1,2}

   或

   int[] arrTemp;

   arrTemp = new int[2]    9.即使不用new,array和string也是引用类型:

int[] arrTmp = {1,2}

int[] arrTmp2 = arrTmp

arrTmp2[1] = 3;//同时改变了arrTmp

 

10 引用类型初始化为NULL,值类型初始化为0

 

11 如果不想引用类型关联改变,必须用深拷贝,如数组用CopyTo

 

12 ArrayList可以操作任何object类型的数据

 

13 is操作用来判断一个变量是否属于某个类型     if (a is int)

 

14 使用as做转换时的安全检查

   Object a = "abc";

   if(a is string)

   {

     string b = (string)a

   }

   和

   Object a = "abc";

   string b = a as string;//如果没有转成功,会给b赋值为null

   if(b != null)    {

     ......

 

   }

   15 finally不论catch到与否,也不论是否有异常发生都会执行

   try    {

     console.writeline("abc");

     return;

   }

   catch //catch不带任何东西,表示捕捉所有异常    {

     ....

   }

   finally

   {

     ....//会在return后执行   

}

   .....//try中有return了,就不会执行了

   如果没有catch捕捉,只用try和finally,发生异常后还是会异常终止。

   16 如果一个名称和c#变量关键字冲突,可在前加@,如class@class

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值