亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#?中的partial?關(guān)鍵字詳解

 更新時(shí)間:2022年07月25日 17:10:17   作者:wumingxiaoyao  
這篇文章主要介紹了C#?中的partial?關(guān)鍵字,partial 關(guān)鍵字用于拆分一個(gè)類、一個(gè)結(jié)構(gòu)、一個(gè)接口或一個(gè)方法的定義到兩個(gè)或更多的文件中,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

引言

partial 關(guān)鍵字用于拆分一個(gè)類、一個(gè)結(jié)構(gòu)、一個(gè)接口或一個(gè)方法的定義到兩個(gè)或更多的文件中。 每個(gè)源文件包含類型或方法定義的一部分,編譯應(yīng)用程序時(shí)將把所有部分組合起來(lái)。在設(shè)計(jì) Framework 時(shí),可以充分利用 partial 這個(gè)特性。

分部類

什么情況下需要拆分類定義呢?

  • 處理大型項(xiàng)目時(shí),使一個(gè)類分布于多個(gè)獨(dú)立文件中可以讓多位程序員同時(shí)對(duì)該類進(jìn)行處理。
  • 當(dāng)使用自動(dòng)生成的源文件時(shí),你可以添加代碼而不需要重新創(chuàng)建源文件。 Visual Studio 在創(chuàng)建 Windows 窗體、Web 服務(wù)包裝器代碼等時(shí)會(huì)使用這種方法。 你可以創(chuàng)建使用這些類的代碼,這樣就不需要修改由 Visual Studio 生成的文件。
  • 使用源生成器在類中生成附加功能時(shí)。

例子

Coords 類 分部在 2 個(gè)文件中定義。

在這里插入圖片描述

CoordsOne.cs
定義了 Coords 類的構(gòu)造函數(shù)
注意簽名 partial class Coords

namespace ConsoleApp1.PartialClass
{
    public partial class Coords
    {
        private int x;
        private int y;

        public Coords(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
}

CoordsTwo.cs
定義了 Coords 類的一個(gè)方法
注意簽名 partial class Coords

namespace ConsoleApp1.PartialClass
{
    public partial class Coords
    {
        public void PrintCoords()
        {
            Console.WriteLine("Coords: {0},{1}", x, y);
        }
    }
}

TestPartial.cs
測(cè)試一下上面的分部類

using ConsoleApp1.PartialClass;

namespace ConsoleApp1
{
    internal class TestPartial
    {
        static void Main(string[] args)
        {
            Coords coords = new Coords(10, 20);
            coords.PrintCoords();
        }
    }
}

結(jié)果:

Coords: 10,20

partial 分部限制

處理分部類定義時(shí)需遵循下面的幾個(gè)規(guī)則:

  • 要作為同一類型的各個(gè)部分的所有分部類型定義都必須使用 partial 進(jìn)行修飾。

例如,下面的類聲明會(huì)生成錯(cuò)誤:

public partial class A { }
//public class A { }  // Error, must also be marked partial
  • partial 修飾符只能出現(xiàn)在緊靠關(guān)鍵字 class、structinterface 前面的位置。
  • 分部類型定義中允許使用嵌套的分部類型,如下面的示例中所示:
partial class ClassWithNestedClass
{
    partial class NestedClass { }
}

partial class ClassWithNestedClass
{
    partial class NestedClass { }
}

要成為同一類型的各個(gè)部分的所有分部類型定義都必須在同一程序集和同一模塊(.exe 或 .dll 文件)中進(jìn)行定義。 分部定義不能跨越多個(gè)模塊。經(jīng)測(cè)試這些分部的文件必須在同一命名空間。
還是上面的例子,CoordsThree.cs 也定義成 partial 類,但是相比 CoordsOne.csCoordsTwo.cs 不是在同一個(gè)命名空間,會(huì)出錯(cuò)。

在這里插入圖片描述

在這里插入圖片描述

  • 類名和泛型類型參數(shù)在所有的分部類型定義中都必須匹配。 泛型類型可以是分部的。 每個(gè)分部聲明都必須以相同的順序使用相同的參數(shù)名。
  • 如果某關(guān)鍵字出現(xiàn)在一個(gè)分部類型定義中,則該關(guān)鍵字不能與在同一類型的其他分部定義中指定的關(guān)鍵字沖突:public,private,protected,internal,abstract,sealed 等

將 CoordsOne.cs 中 public 改成 internal,產(chǎn)生訪問(wèn)屬性沖突。

在這里插入圖片描述

分部接口和結(jié)構(gòu)

同理,也可以開(kāi)發(fā)分部結(jié)構(gòu)和接口

partial interface ITest
{
    void Interface_Test();
}

partial interface ITest
{
    void Interface_Test2();
}

partial struct S1
{
    void Struct_Test() { }
}

partial struct S1
{
    void Struct_Test2() { }
}

分部方法

分部方法在分部類型的一部分中定義了簽名,并在該類型的另一部分中定義了實(shí)現(xiàn)。 通過(guò)分部方法,類設(shè)計(jì)器可提供與事件處理程序類似的方法掛鉤,以便開(kāi)發(fā)者決定是否實(shí)現(xiàn)。 如果開(kāi)發(fā)者不提供實(shí)現(xiàn),則編譯器在編譯時(shí)刪除簽名。 以下條件適用于分部方法:

  • 聲明必須以上下文關(guān)鍵字 partial 開(kāi)頭。
  • 分部類型各部分中的簽名必須匹配。
  • 構(gòu)造函數(shù)、終結(jié)器、重載運(yùn)算符、屬性聲明或事件聲明中不允許使用 partial 關(guān)鍵字。

例如:

namespace PM
{
    partial class A
    {
        partial void OnSomethingHappened(string s);
    }

    // This part can be in a separate file.
    partial class A
    {
        // Comment out this method and the program
        // will still compile.
        partial void OnSomethingHappened(String s)
        {
            Console.WriteLine("Something happened: {0}", s);
        }
    }
}

在以下情況下,不需要使用分部方法即可實(shí)現(xiàn):

  • 沒(méi)有任何可訪問(wèn)性修飾符(包括默認(rèn)的 專用)。
  • 返回 void。
  • 沒(méi)有任何輸出參數(shù)。
  • 沒(méi)有以下任何修飾符:virtual、override、sealed、new 或 extern。

this 和 partial 的區(qū)別

C# - this 的用法 一文中有介紹 this 具有擴(kuò)展類方法的功能,那么 thispartial 有區(qū)別是?

  • 概念的區(qū)別,this 是對(duì)原有功能進(jìn)行擴(kuò)展,partial 是將整體分成多個(gè)部分存放,便于維護(hù)。
  • 實(shí)現(xiàn)方式的區(qū)別

patial 分部的簽名要求一致,必須是 partial class/interface/struct Name,文件名不一樣。
this 擴(kuò)展類名不一樣,但必須是靜態(tài)的類,靜態(tài)的方法,方法第一個(gè)參數(shù)必須是 this ClassName

  • 調(diào)用的區(qū)別

partial 分部的各個(gè)文件必須在同一 namespace 命名空間
this 擴(kuò)展可以在不同命名空間,但是需要導(dǎo)入擴(kuò)展的 namespace 命名空間后才能調(diào)用擴(kuò)展的方法。

到此這篇關(guān)于C# 中的partial 關(guān)鍵字的文章就介紹到這了,更多相關(guān)C# partial 關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#定時(shí)器和global實(shí)現(xiàn)自動(dòng)job示例

    c#定時(shí)器和global實(shí)現(xiàn)自動(dòng)job示例

    這篇文章主要介紹了c#定時(shí)器和global實(shí)現(xiàn)自動(dòng)job示例,大家參考使用吧
    2014-01-01
  • C#簡(jiǎn)單的特殊輸出實(shí)例

    C#簡(jiǎn)單的特殊輸出實(shí)例

    這篇文章主要介紹了C#簡(jiǎn)單的特殊輸出,以實(shí)例實(shí)現(xiàn)了針對(duì)一些特殊字符與位置的輸出控制,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • c# 如何實(shí)現(xiàn)圖片壓縮

    c# 如何實(shí)現(xiàn)圖片壓縮

    這篇文章主要介紹了c# 實(shí)現(xiàn)圖片壓縮的示例,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-11-11
  • C#判斷字符串是否是數(shù)字(實(shí)例)

    C#判斷字符串是否是數(shù)字(實(shí)例)

    本文主要分享了C#實(shí)現(xiàn)判斷字符串是否是數(shù)字的具體實(shí)例,具有一定的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • C# 字符串的連接(實(shí)例講解)

    C# 字符串的連接(實(shí)例講解)

    下面小編就為大家分享一篇C# 字符串的連接實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • C#保存與讀取DataTable信息到XML格式的方法

    C#保存與讀取DataTable信息到XML格式的方法

    這篇文章主要介紹了C#保存與讀取DataTable信息到XML格式的方法,實(shí)例分析了C#讀取DataTable信息到XML格式及讀取XML格式數(shù)據(jù)到DataTable的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C# DirectShow預(yù)覽攝像頭并截圖

    C# DirectShow預(yù)覽攝像頭并截圖

    這篇文章主要為大家詳細(xì)介紹了C# DirectShow預(yù)覽攝像頭并截圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C# 在PDF中創(chuàng)建和填充域

    C# 在PDF中創(chuàng)建和填充域

    本文主要介紹了C# 在PDF中創(chuàng)建和填充域的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • C#?如何獲取當(dāng)前進(jìn)程或線程的ID

    C#?如何獲取當(dāng)前進(jìn)程或線程的ID

    這篇文章主要介紹了C#?如何獲取當(dāng)前進(jìn)程或線程的ID,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)

    C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評(píng)論