熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NET中的特殊類型成員[3]

2022-06-13   來源: .NET編程 

  索引屬性

  某些類型如SystemCollectionsSortedList暴露邏輯元素列表為了能輕松存取這種類型中的元素可以定義一個索引屬性(也叫索引器indexer)一個索引屬性的例子其索引器的的使用極其簡單

  BitArray ba = new BitArray();

  for (int x = ; x < ; x++) {

  // 置所有偶數位為on

  ba[x] = (x % == );

  ConsoleWriteLine(Bit + x + is + (ba[x] ? On : Off));

  }

  BitArray例子中索引器帶一個Int參數bitPosition索引器必須至少帶一個參數參數個數可以是兩個或更多這些參數(以及返回類型)可以是任何類型創建以String作為參數的索引器查找聯合數組中的值是十分普通的事情一種類型可以提供多個索引器只要其原型不同

  就像set屬性set索引器存取方法包含一個隱藏的參數當存取方法被調用時它表示想得到一個新的值BitArray的set存取方法顯示了這個參數值的使用

  一個設計良好的索引器應該具備get和set兩個存取方法即便你能只實現get存取方法(對於只讀語義)或者只實現set存取方法(對於只寫語義)建議你的索引器實現兩個存取器理由很簡單索引的使用者不希望只有半個行為例如當編寫下面兩行代碼時使用者不想看到編譯器出錯

  String s = SomeObj[]; // 如果有存取器編譯 OK

  SomeObj[] = s; //如果沒有存取器編譯出錯

  索引器總是起類型實例的作用並且不能被聲明為靜態但它可以是公共的私有的保護的或內部的

  當你創建索引屬性時編譯器實際上會發布專門的get_Item和/或set_Item存取器方法大多數編譯器都會理解這些專門的方法並且會允許開發人員利用專門的索引屬性語法存取這些方法但是與CLS(公共語言系統)兼容的編譯器不需要完全支持索引屬性只要編譯器支持專用存取器調用即可

  同樣對於完全支持索引屬性的編譯器在定義和使用這些屬性的時候需要的語法稍有差別例如C++受管擴展需要使用_property關鍵字

  結論

  本文中所討論的概念對於所有NET的程序員來說極其重要我所提到的特殊的類型成員使組件成為公共語言運行時最重要的內容也就是說現代組件被設計成支持屬性

[]  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/15660.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.