C#分布類

來源:互聯網
上載者:User

分布類的定義:

可以將類、結構或介面的定義拆分到兩個或多個源檔案中。每個源檔案包含類定義的一部分,編譯應用程式時將把所有部分組合起來。在以下幾種情況下需要拆分類定義:

  • 處理大型項目時,使一個類分佈於多個獨立檔案中可以讓多位程式員同時對該類進行處理。

  • 使用自動產生的源時,無需重新建立源檔案便可將代碼添加到類中。Visual Studio 在建立 Windows 表單、Web 服務封裝代碼等時都使用此方法。您無需編輯 Visual Studio 所建立的檔案,便可建立使用這些類的代碼。

  • 若要拆分類定義,請使用 partial 關鍵字修飾符,如下所示:
    public partial class Employee
    {
        public void DoWork()
        {
        }
    }

    public partial class Employee
    {
        public void GoToLunch()
        {
        }
    }
    需要注意的部分如下:

    使用 partial 關鍵字表明可在命名空間內定義該類、結構或介面的其他部分。所有部分都必須使用 partial 關鍵字。在編譯時間,各個部分都必須可用來形成最終的類型。各個部分必須具有相同的可訪問性,如 public、private 等。

    如果將任意部分聲明為抽象的,則整個類型都被視為抽象的。如果將任意部分聲明為密封的,則整個類型都被視為密封的。如果將任意部分聲明為基底類型,則整個類型都將繼承該類。

    指定基類的所有部分必須一致,但忽略基類的部分仍繼承該基底類型。各個部分可以指定不同的基底介面,最終類型將實現所有分部聲明所列出的全部介面。在某一分部定義中聲明的任何類、結構或介面成員可供所有其他部分使用。最終類型是所有部分在編譯時間的組合。
    處理部分類別定義時需遵循下面的幾個規則:

  • 要作為同一類型的各個部分的所有部份型別定義都必須使用 partial 進行修飾。

  • partial 修飾符只能出現在緊靠關鍵字 classstructinterface 前面的位置

  • 部份型別定義中允許使用嵌套的部分型別,例如:
    partial class ClassWithNestedClass
    {
        partial class NestedClass { }
    }

    partial class ClassWithNestedClass
    {
        partial class NestedClass { }
    }

  • 要成為同一類型的各個部分的所有部份型別定義都必須在同一程式集和同一模組(.exe 或 .DLL 檔案)中進行定義。分部定義不能跨越多個模組。

  • 類名和泛型型別參數在所有的部份型別定義中都必須匹配。泛型型別可以是分部的。每個分部聲明都必須以相同的順序使用相同的參數名。

  • 下面的用於部份型別定義中的關鍵字是可選的,但是如果某關鍵字出現在一個部份型別定義中,則該關鍵字不能與在同一類型的其他分部定義中指定的關鍵字衝突: public protected private internal abstract sealed 基類 new修飾符 一般約束
    下面還是舉列子來說話吧。
    public partial class CoOrds
    {
        private int x;
        private int y;

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

    public partial class CoOrds
    {
        public void PrintCoOrds()
        {
            System.Console.WriteLine("CoOrds: {0},{1}", x, y);
        }

    }

    class TestCoOrds
    {
        static void Main()
        {
            CoOrds myCoOrds = new CoOrds(10, 15); myCoOrds.PrintCoOrds(); }
    輸出結果為:

    CoOrds: 10,15
    樣本二:
    partial interface ITest
    {
        void Interface_Test();
    }

    partial interface ITest
    {
        void Interface_Test2();}partial struct S1
    {
        void Struct_Test() { }
    }

    partial struct S1
    {
        void Struct_Test2() { }
    }
    通過這個列子說明我們也可以開發分布介面和分布結構!
    最終再舉個列子,這是一個Windows應用程式,向Form上添加三個TestBox,再添加一個Combox和一個button,用來進行加減乘除運算和執行運算。

範例程式碼如下:

using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Test02
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        partial class account        //部分類別第一部分
        {
            public int addition(int a, int b)     //建立一個整型方法
            {
                return a + b;        //方法中的加法運算
            }
        }
        partial class account        //部分類別第二部分
        {
            public int multiplication(int a, int b)    //建立一個整型方法
            {
                return a * b;        //方法中的乘法運算
            }
        }
        partial class account  //減法
        {
            public int subtration(int a,int b)
            {
                return a-b;
            }
        }
        partial class account //除法
        {
            public int division(int a, int b)
            {
                return a / b;
            }
        }       
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.SelectedIndex = 0;
            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                account at = new account();
                int M = int.Parse(txtNo1.Text.Trim());
                int N = int.Parse(txtNo2.Text.Trim());
                string str = comboBox1.Text;
                switch (str)
                {
                    case "加": txtResult.Text = at.addition(M, N).ToString(); break;
                    case "減": txtResult.Text = at.subtration(M, N).ToString(); break;
                    case "乘": txtResult.Text = at.multiplication(M, N).ToString(); break;
                    case "除": txtResult.Text = at.division(M, N).ToString(); break;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Ok,今天就到這嘍,以後有新的認知再分享給大家,有錯誤之處請指出,有個人見解,請指教!謝謝!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.