天天看點

C#基礎系列(3)之關鍵字partial

        之前一直以為它很簡單,就沒把它太當回事。今天卻在項目代碼當中遇到了這個關鍵字,才發現對它的認識僅僅停留在表面上,是以,為了深刻記住它,特此寫一篇部落格。

1. 什麼是partial類型?

        C# 2.0 引入了局部類型的概念。局部類型允許我們将一個類、結構或接口分成幾個部分,分别實作在幾個不同的.cs檔案中。

2.什麼時候會用到partial關鍵詞?

局部類型使用情況如下:

(1) 類型特别大,不宜放在一個檔案中實作。

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

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

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

        下面給出了一個Program局部類,具體看代碼示例:

//這個Program的局部類,檔案名為:Program.cs
using System;

namespace CSharpGrammarlyTest
{
    public partial class Program
    {
		static void Test3()
        {
            Console.WriteLine("這是Program類的Test3()方法");
        }
        
        static void Main(string[] args)
        {
            //調用成員對象的方法
            Program program = new Program();
            program.Test(); //這是Program_internal類的Test()方法
            Console.WriteLine("program.para: "+program.para);//0
			//調用靜态屬性和方法
            Console.WriteLine(Program.num); //2
            Console.WriteLine(num); //2
            Test2(); //這是Program_internal類的Test2()方法

            Console.ReadKey();
        }
    }
}
           
//這個也是Program的局部類,檔案名為:Program_internal.cs
using System;

//必須在同一個命名空間下
namespace CSharpGrammarlyTest
{
	//這裡的類名,必須與上一個保持一緻,不然會認為是兩個局部類
    public partial class Program
    {
        public int para = 0;

        public void Test()
        {
            Console.WriteLine("這是Program_internal類的Test()方法");
        }


        public static int num = 2;

        public static void Test2()
        {
            Test3(); //調用Program.cs的Test3()方法
            Console.WriteLine("這是Program_internal類的Test2()方法");
        }
    }
}
           

        上述代碼不在運作時能夠通過編譯器的文法編譯,原因在于:當我們使用partial修飾class時,編譯器會預設把這些檔案放在一起編譯,而不是單個獨立編譯。

3. partial的限制

(1) partial關鍵詞隻适用于類、接口、結構,不支援委托和枚舉。

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

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

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

4. partial的注意點

(1) 關鍵字partial是一個上下文關鍵字,隻有和 class、struct、interface 放在一起時才有關鍵字的含義。是以partial的引入不會影響現有代碼中名稱為partial的變量。

(2) 局部類型的各個部分一般是分開放在幾個不同的.cs檔案中,但C#編譯器允許我們将他們放在同一檔案中。

參考連接配接:

  1. https://www.cnblogs.com/superelement/p/7809086.html