C#分布类

分布类的定义:

可以将结构接口的定义拆分到两个或多个源文件中。每个源文件包含类定义的一部分,编译应用程序时将把所有部分组合起来。在以下几种情况下需要拆分类定义:

  • 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。

  • 使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。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,今天就到这喽,以后有新的认知再分享给大家,有错误之处请指出,有个人见解,请指教!谢谢!

posted @ 2010-04-19 22:54  魄力  阅读(5990)  评论(1编辑  收藏  举报