一、分部类

  什么是部分类呢?简单来说就是将一个类型或方法拆分到两个或多个源文件中,每个源文件只包含类型定义的一部分。

  当使用自动生成的源时,无须重新创建源文件便可将代码添加到类中。Visual Studio在创建Window窗体,Web服务包装代码时都是使用此方法。

1、分部类的特征

  • 类的定义前要加partial。
  • 分部类可以定义在两个不同的.cs文件,也可以定义在同一个.cs文件中。
  • 分部类必须同属一个命名空间。

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AllDemo
{
class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person(1,"关羽",23);
            p.SaySomeThing();

            Console.ReadKey();
        }
    }

    public partial class Person
    {
        public Person(int id, string name, int age)
        {
            Id = id;
            Name = name;
            Age = age;
        }

        public int Id { get; set; }

        public string Name  {get; set; }
    }

    public partial class Person
    {
        public int Age { get; set; }

        public void SaySomeThing()
        {
            Console.WriteLine("我的名字叫" + Name +",我今年" + Age + "");
        }
    }
}
View Code

分部类虽然定义在不同的位置,但是编译器会将它们合并为一,就像它们原本就没有分开过。

二、分部方法

   分部方法的声明由两个部分组成:定义和实现。分部方法包含在分部类或分部结构中。分部方法的签名和它的可选实现可以位于同一个或两个不同的分部累中。如果未提供分部方法的实现,则编译器将自动移除方法签名,以及移除所有其他地方代码对该方法的调用。

分部方法的严格限制

  1. 声明必须以上下文关键字partial开头
  2. 声明不能有访问修饰符,因此是隐式私有的。
  3. 不能有返回值。
  4. 可以有ref参数,不能有out参数。
  5. 分部方法可以使用static和unsafe修饰符
  6. 参数名称在实现声明和定义声明中虽然可以不同,但仍然推荐使用一直的方法签名。

示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AllDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.Say();    //输出 你好

            Console.ReadKey();
        }
    }

    public partial class Person
    {
        //必须定义在分部类
        partial void Say1(); //方法签名

        partial void Say1()
        {
            Console.WriteLine("你好");
        }

        //因为不能具有修饰符,因此是隐式私有的,只能在内部调用
        public void Say()
        {
            Say1();
        }
    }
}
View Code