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

C# partial 說明

2013-11-13 09:56:55  來源: .NET編程 

   什麼是局部類型?

  C# 引入了局部類型的概念局部類型允許我們將一個類結構或接口分成幾個部分分別實現在幾個不同的cs文件中

  局部類型適用於以下情況

  () 類型特別大不宜放在一個文件中實現

  () 一個類型中的一部分代碼為自動化工具生成的代碼不宜與我們自己編寫的代碼混合在一起

  () 需要多人合作編寫一個類

  局部類型是一個純語言層的編譯處理不影響任何執行機制事實上C#編譯器在編譯的時候仍會將各個部分的局部類型合並成一個完整的類

  public partial class Program

  {

  static void Main(string[] args)

  {

  }

  }

  partial class Program

  {

  public void Test()

  {

  }

  }

   局部類型的限制

  () 局部類型只適用於類接口結構不支持委托和枚舉

  () 同一個類型的各個部分必須都有修飾符 partial

  () 使用局部類型時一個類型的各個部分必須位於相同的命名空間中

  () 一個類型的各個部分必須被同時編譯

   局部類型的注意點

  () 關鍵字partial是一個上下文關鍵字只有和 classstructinterface 放在一起時才有關鍵字的含義因此partial的引入不會影響現有代碼中名稱為partial的變量

  () 局部類型的各個部分一般是分開放在幾個不同的cs文件中但C#編譯器允許我們將他們放在同一文件中

   局部類型的應用特性

  在局部類型上的特性具有累加效應

  [Attribute AttributeHello)]

  partial class Class{}

  [Attribute AttributeExit)]

  partial class Class{}

  相當於

  [Attribute AttributeHello Attribute AttributeExit)]

  class Class {}

  注Attribute屬性允許在類上多次使用

   局部類型上的修飾符

  () 一個類型的各個部分上的訪問修飾符必須維持一致性

  () 如果一個類型有一個部分使用了abstract修飾符那麼整個類都將被視為抽象類

  () 如果一個類型有一個部分使用了 sealed 修飾符那麼整個類都將被視為密封類

  () 一個類的各個部分不能使用相互矛盾的修飾符比如不能在一個部分上使用abstract又在另一個部分上使用sealed

   局部類型的基類和接口

  () 一個類型的各個部分上指定的基類必須一致某個部分可以不指定基類但如果指定則必須相同

  () 局部類型上的接口具有累加效應

  partial class Class: Iinterface Iinterface {}

  partial class Class: Iinterface {}

  partial class Class: Iinterface {}

  相當於

  class Class: Iinterface Iinterface Iinterface {}

  把所有的源代碼作為一個類型保存在一個單獨的文件裡是一個好的編程習慣但有時候一個類型變得過於龐大以至於這樣做成為一個不切實際的約束此外編程人員經常使用源代碼生成器來產生一個應用程序的初始結構然後再修改產生的代碼不幸的是當源代碼在將來某個時候再次發布時已存在的修改就要被覆蓋了

  Partial types允許把類結構和接口打破為多個代碼碎片存在不同的源代碼文件以便於簡化開發和維護加之partial types允許機器產生的和用戶編寫的類型部分分離這樣就可以方便增加工具產生的代碼

  Partial是一個新的類型修飾符在把一個類型定義在多個部分的時候使用下面是一個partial class的示例以兩個部分實現這兩個部分可能在兩個不同的源代碼文件比如說第一個部分是由一個數據庫映射工具產生的而第二個部分是手工編寫的

  public partial class Customer

  {

  private int id;

  private string name;

  private string address;

  private List<Order> orders;

  public Customer() {

  }

  }

  public partial class Customer

  {

  public void SubmitOrder(Order order) {

  ordersAdd(order)

  }

  public bool HasOutstandingOrders() {

  return ordersCount > ;

  }

  }

  當上面的兩個部分在一起編譯結果產生的代碼就好像這個類是寫在一個單元裡一樣

  public class Customer

  {

  private int id;

  private string name;

  private string address;

  private List<Order> orders;

  public Customer() {

  }

  public void SubmitOrder(Order order) {

  ordersAdd(order)

  }

  public bool HasOutstandingOrders() {

  return ordersCount > ;

  }

  }

  一個partial type的所有部分必須在一起編譯這樣所有的部分才能在編譯的時候整合在一起特別的是partial types不允許加入已經編譯好的類型


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