so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          .NET零散筆記[2]

          可以不用強制類型轉換,用as來替代,這樣做的好處是:如果轉換是非法的,不會產生異常,只是產生一個值為null的轉換結果。比如:Person p=new Person();
          Student s= p as Student;
          Console.WriteLine("p={0}", c==null ? "null" : c.ToString());

          類的成員包括:字段;方法:屬性(智能字段);常量;索引器(智能數組);事件;操作符重載。

          C#中對于類中定義的字段,如果前面不加限定符,則默認為private。

          C#中和Java一樣,對于字段或方法的定義,都是在每一個前面都要加限定符!

          C#中多了一個internal限定符,表示該成員只在當前編譯單元內可見,根據代碼所在的位置,訪問限定符“internal”代表了“public”和“protected”的訪問性組合。

          C#中調用基類的構造函數用base而不是super,而且調用位置也不同于Java,還是繼承了C++的傳統寫法,如:
          public B(int x) : base(x)

          C#中readonly關鍵字和Java中的final差不多,都是定義常量用的,但是它定義的常量可以在構造函數內初始化,而const定義的常量只能在定義時初始化。如果再用static限定,那么也可以在static塊中初始化。

          C#中用限定符“sealed”來禁止一個類派生子類,和Java中的final關鍵字修飾一個類時的作用一樣。

          C#中用ref和out兩個關鍵字來使得函數參數可以帶回返回值。ref和C++中用“&”定義的引用一樣,如:
          public void change(ref int x,ref int y){
           int tmp=x;
           x=y;
           y=tmp;
          }
          在調用時也得change(ref x,ref y);但需要注意的是,x和y這兩個變量必須被事先初始化。

          使用out時,就不必初始化了,使用方法同ref。關鍵是要區別什么時候用ref什么時候用out。其實剛才在上面舉的例子,一定要用ref,因為這個函數在處理時需要用到參數已有的值來交換,如果沒有初始值,那還交換個什么勁兒啊,而如果我們只是希望通過函數調用帶回來一些信息給我們使用,也就是想實現多返回值,僅僅出于此目的且函數處理中不必利用參數的初始值,那么就應該使用out。

          C#中用“params”關鍵字來使得方法的參數個數可變,相當于在Java里定義函數時使用...效果一樣。如:
          public int sum(params int[] x)。但必須定義為數組類型。而在Java中這樣就行:public int sum(int ... x)

          C#中函數覆蓋時,必須用關鍵字new來修飾,否則A.max()和B.max()各調用各自的,誰也不干涉誰(這里B派生自A)。

          C#中要實現多態,必須在基類定義函數時用關鍵字virtual修飾,在子類中覆蓋函數時用override修飾。而且被virtual修飾的基類函數還不能是private的,因為它對子類不可見。

          C#中定義抽象類或抽象方法,也都是用abstract關鍵字聲明,但是在子類實現時必須用override關鍵字修飾要實現的抽象函數。

          C#中可以用foreach(int tmp in x)來實現類似Java中for(int tmp : x)的功能。

          C#中用get和set關鍵字來得到、設置類的屬性,這期間還會用到關鍵字value。舉個例子如下:
          protected string zipCode;
          public string ZipCode
          {
           get
           {
            return zipCode;
           }
           set
           {
            zipCode=value;
           }
          }
          這里ZipCode是一個屬性名,可以隨便起名字,但是為了和字段相匹配,我們給它起名為“ZipCode”。在使用時就得這樣:
          Address addr=new Address();
          addr.ZipCode="55555";
          string zip=addr.ZipCode;

          C#中不能夠在類中定義對象的時候就用new為其賦值!!!!!

          C#中定義多維數組用int [, ,] x;多維數組得到某一維的長度用x.GetLength(第幾維);查詢多維數組的維數用x.Rank;

          C#中用int [][] x;來定義二維的“鋸齒狀數組”,這同Java是一樣的,這種鋸齒狀數組當然包括常規的二維數組了,但是在Java中并沒有對它們進行區分。

          ================索引器================
          簡單說來,所謂索引器就是一類特殊的屬性,通過它們你就可以像引用數組一樣引用自己的類。
          聲明方法如下(與屬性相似):
          //修飾符 類型名稱 this [類型名稱 參數名]
          public type this [int index]
          {
          get
          {
          //...
          }
          set
          {
          //...
          }
          }
          用例子簡單說明:
          using System.Collections;

          static void Main(string[] args)
          {
          //調用IntBits.IntBits方法,意為將63賦給bits
          IntBits bits = new IntBits(63);
          //獲得索引6的bool值,此時 bits[6]將調用索引器"public bool this[int index]"中的Get,值為True
          bool peek = bits[6];
          Console.WriteLine("bits[6] Value: {0}",peek);
          bits[0] = true;
          Console.WriteLine();

          Console.ReadKey();
          }

          struct IntBits
          {
          private int bits;
          public IntBits(int initialBitValue)
          {
          bits = initialBitValue;
          Console.WriteLine(bits);
          }
          //定義索引器
          //索引器的“屬性名”是this,意思是回引類的當前實例,參數列表包含在方括號而非括號之內。
          public bool this [int index]
          {
          get
          {
          return true;
          }
          set
          {
          if (value)
          {
          bits = 100;
          }
          }
          }

          備注:

          所有索引器都使用this關鍵詞來取代方法名。Class或Struct只允許定義一個索引器,而且總是命名為this。

          索引器允許類或結構的實例按照與數組相同的方式進行索引。索引器類似于屬性,不同之處在于它們的訪問器采用參數。

          get 訪問器返回值。set 訪問器分配值。

          this 關鍵字用于定義索引器。

          value 關鍵字用于定義由 set 索引器分配的值。

          索引器不必根據整數值進行索引,由您決定如何定義特定的查找機制。

          索引器可被重載。

          索引器可以有多個形參,例如當訪問二維數組時。

          索引器可以使用百數值下標,而數組只能使用整數下標:如下列定義一個String下標的索引器
          public int this [string name] {...}

          屬性和索引器

          屬性和索引器之間有好些差別:

          類的每一個屬性都必須擁有唯一的名稱,而類里定義的每一個索引器都必須擁有唯一的簽名(signature)或者參數列表(這樣就可以實現索引器重載)。

          屬性可以是static(靜態的)而索引器則必須是實例成員。

          為索引器定義的訪問函數可以訪問傳遞給索引器的參數,而屬性訪問函數則沒有參數。

          posted on 2008-02-28 20:55 so true 閱讀(343) 評論(0)  編輯  收藏 所屬分類: .NET


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 德清县| 丽水市| 额济纳旗| 南投县| 万载县| 新兴县| 鄂州市| 张家界市| 电白县| 六枝特区| 永顺县| 广安市| 婺源县| 灵寿县| 保靖县| 桐城市| 大城县| 金昌市| 四子王旗| 铁岭市| 南皮县| 鄢陵县| 耿马| 临安市| 涪陵区| 清流县| 武平县| 堆龙德庆县| 车险| 南京市| 江山市| 灌南县| 盘锦市| 辽阳县| 布尔津县| 开化县| 海城市| 南涧| 中方县| 全南县| 仪征市|