最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#基礎知識之Partial的使用

 更新時間:2021年01月15日 10:21:32   作者:搬磚滴  
這篇文章主要介紹了C#基礎知識之Partial的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

C# 2.0 可以將類、結(jié)構(gòu)或接口的定義拆分到兩個或多個源文件中,在類聲明前添加partial關(guān)鍵字即可。

例如:下面的PartialTest類

class PartialTest
{
  string Str_FieldTest; 
  int Int_FieldTest; 
  public void DoTest() 
  { 
    Debug.Print("Test"); 
  }
}

 可在不同源文件中寫成下面形式:

一個文件中寫:

partial class PartialTest
{
  string Str_FieldTest;
  int Int_FieldTest;
}

另一個文件中寫:

partial class PartialTest
{
  public void DoTest()
  {
  Debug.Print("Test");
  }
}

一、什么情況下使用分部類?

  • 處理大型項目時,使一個類分布于多個獨立文件中可以讓多位程序員同時對該類進行處理(相當于支持并行處理,很實用);
  • 使用自動生成的源時,無需重新創(chuàng)建源文件便可將代碼添加到類中。Visual Studio 在創(chuàng)建Windows 窗體、Web 窗體時都使用此方法。你不用編輯Visual Studio 所創(chuàng)建的文件,便可創(chuàng)建使用這些類的代碼。換句話說:系統(tǒng)會自動創(chuàng)建一個文件(一般記錄的是窗體及窗體中的控件的屬性),另一個或幾個文件記錄的是用戶自己編寫的代碼。這兩部分分開可以使結(jié)構(gòu)顯得非常清晰,用戶只需關(guān)注自己負責的那部分就行了(需要的話,這兩部分可以互相調(diào)用)。等到了編輯運行的時候,系統(tǒng)會自動將這兩部分合成一個文件。

二、使用Partial需要注意以下一些情況

  • 使用partial 關(guān)鍵字表明可在命名空間內(nèi)定義該類、結(jié)構(gòu)或接口的其他部分
  • 所有部分都必須使用partial 關(guān)鍵字
  • 各個部分必須具有相同的可訪問性,如public、private 等
  • 如果將任意部分聲明為抽象的,則整個類型都被視為抽象的
  • 如果將任意部分聲明為密封的,則整個類型都被視為密封的
  • 如果任意部分聲明繼承基類時,則整個類型都將繼承該類
  • 各個部分可以指定不同的基接口,最終類型將實現(xiàn)所有分部聲明所列出的全部接口
  • 在某一分部定義中聲明的任何類、結(jié)構(gòu)或接口成員可供所有其他部分使用
  • 嵌套類型可以是分部的,即使它們所嵌套于的類型本身并不是分部的也如此。如下所示:
class Container
{
  partial class Nested
  {
    void Test1();
  }
  partial class Nested
  {
    void Test2();
  }
}

三、使用分布類的一些限制

1、要作為同一類型的各個部分的所有分部類型定義都必須使用partial 進行修飾。如下所示:

public partial class A { }
public class A { } // Error, must also be marked partial

2、partial 修飾符只能出現(xiàn)在緊靠關(guān)鍵字class、struct 或interface前面的位置(枚舉或其它類型都不能使用partial);

3、要成為同一類型的各個部分的所有分部類型定義都必須在同一程序集和同一模塊(.exe 或.dll 文件)中進行定義。分部定義不能跨越多個模塊;

4、類名和泛型類型參數(shù)在所有的分部類型定義中都必須匹配。泛型類型可以是分部的。每個分部聲明都必須以相同的順序使用相同的參數(shù)名。

四、應用場景

可以使用partial class的場景很多。這里分析一個ORM的例子。系統(tǒng)中有一個Cat類,屬性ID、Age、Weight都需要存儲到數(shù)據(jù)庫中,一個信息系統(tǒng)中常見的需求。通過讀取數(shù)據(jù)庫的結(jié)構(gòu),可以用工具生成Cat類的代碼。并且ORM框架支持了從數(shù)據(jù)庫信息生成Cat對象。

現(xiàn)在的Cat什么動作都沒有,客戶說,我們需要一個Miaow()的函數(shù)。這時就需要對ORM生成的Cat類進行擴展了??梢钥隙ǖ匾稽c是,我們不能修改自動生成的代碼,因為這會牽涉到數(shù)據(jù)庫結(jié)構(gòu)與代碼同步的問題。解決這個需求有兩種方法:繼承方式擴展,partial class擴展。

1、繼承方式擴展

工具自動生成一個CatBase類,這個類只有屬性,嵌入到ORM框架中。既然需要擴展功能,很容易想到對這個基類繼承,于是有了Cat類。Cat類如愿以償?shù)赜辛薓iaow()函數(shù)。以前系統(tǒng)中用的是CatBase的實例,現(xiàn)在創(chuàng)建CatBase實例的地方需要改為創(chuàng)建Cat的實例。這個問題讓ORM框架解決吧??蛻舻男枨髮崿F(xiàn)了,我們自己的代碼生成也沒有遭到破壞,任務完成。

2、partial class擴展

partial class簡單地說就是可以將一個類的代碼寫到兩個或多個代碼文件中。編譯器在編譯的過程中將這幾個文件組合起來一起編譯。一個很酷的技術(shù)。工具生成的Cat類仍然不變。既然需要增加函數(shù),那么在新建一個代碼文件,將Miaow()函數(shù)寫出來就可以。需要做的僅僅是將類的聲明由class改為partial class,任務完成。

3、對比分析

兩種思路都可以實現(xiàn)需求。孰優(yōu)孰劣需要仔細分析一下。

  • 實例創(chuàng)建:partial class更加簡潔。
  • 系統(tǒng)復雜度:對于系統(tǒng)來說,partial class方式下只存在一個類,而繼承方式有兩個類。
  • 繼承邏輯:從邏輯上講,Cat并不需要一個基類CatBase,這樣做僅僅是因為在代碼構(gòu)建過程中的一個限制。
  • 維護性:兩種方式下都會存在兩個代碼文件,維護成本并沒有區(qū)別。
  • 可讀性:兩個Cat文件確實讓人費解。

4、總結(jié)

整體上說,使用partial class更加優(yōu)雅一些。“繼承”的這種方式比較符合傳統(tǒng)的思維習慣,而partial class到底是不是滿足開閉原則呢,這點確實不好說。不過在軟件構(gòu)建上,我是一個實用主義者,哪種方式好用就用哪一種。在ORM的場景中,partial class更加好一些,但有的時候,兩個類之間確實就存在繼承關(guān)系,那么就必須用到繼承了。雖然絕大多數(shù)情況下,都需要繼承方式,但是既然有了partial class技術(shù),我們在做設計時也需要考慮這個思路。使用partial class確實會帶來可讀性的損失,尤其是一個類分布在很多個文件中的時候,所以文件的命名最好是有一個規(guī)范來保證。

到此這篇關(guān)于C#基礎知識之Partial的使用的文章就介紹到這了,更多相關(guān)C# Partial內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

泗阳县| 南安市| 万宁市| 寻乌县| 海口市| 福泉市| 板桥市| 内丘县| 顺昌县| 灵宝市| 綦江县| 钦州市| 揭阳市| 靖西县| 徐闻县| 怀化市| 西华县| 莱州市| 子洲县| 格尔木市| 大宁县| 调兵山市| 固阳县| 博湖县| 万州区| 夏津县| 霍林郭勒市| 漳平市| 潞城市| 清徐县| 大埔区| 潜江市| 延吉市| 长春市| 青神县| 宣城市| 依兰县| 峨山| 清镇市| 安丘市| 乌鲁木齐市|