C#的分部类(partial)和方法

一、实现的效果

    C#的分部关键字(partial)能够拆分一个类、一个结构、一个接口或一个方法为两个或更多个的文件,分部的每个文件都可以包含自己的类型和方法,程序编译时会将同类的分部内容合并为一个。

这是关于《分部类(partial)和方法》的示例程序工程icon-default.png?t=M3K6https://download.csdn.net/download/xiaochenXIHUA/85236324

二、分部类

2.0、类的修饰符

类修饰符说明
序号类修饰符类修饰符说明
1new

①new用作修饰符时【用于嵌套类表示类隐藏同名的继承成员】

②new用作关键字时【用于对类进行实例化(如创建对象)】

2public【访问无限制】public可将类从程序集-->命名空间中将类暴露出去,供其他程序集或命名空间使用
3private【仅限于为其他类成员时访问】private限制只有在该类为其他类的成员时才能修饰,不能直接修饰类。
4protect【仅限于派生类访问】Protect限制在类成员之间,常用于子类继承父类,父类用Protect修饰,此时子类可以访问父类用Protect修饰的内容,其他类则不能访问
5internal【仅限于当前程序集访问】internal限制类只可以在一个程序集中相互自由访问
6abstract【修饰为抽象类、不能实例化】abstract修饰类可作为基类、派生类
7sealed【修饰为密封类、不能为基类】sealed修饰的类不能被继承
8static【修饰为静态类】static修饰的类在程序运行时就直接开辟内存,可以直接通过类名调用静态类的成员、方法,而不用实例化该类

注意:partial 修饰符不可用于委托或枚举声明中 。

2.1、分部类

分部类功能说明
序号分部类功能说明
1分部类必须使用关键字【partial】修饰,且必须在【class】前
2各个分部类都必须具有相同的访问性
3如果任意分部类声明为抽象(密封),则整个类都被视为抽象(密封)
4如果任意分部类继承父类,则整个类都继承父类
5在任意分部类声明的属性、结构、接口都可以让其他分部类使用
6各个分部类可以指定不同的接口,最终类将实现所有分部类的所有接口

2.1.1、分部类的使用场景

分部类的使用场景
序号分部类使用场景说明
1使用自动生成的源文件时,自动创建的源文件为一个内容,而对应的逻辑处理业务为一个内容,互不干扰,两个文件的内容可以相互调用【常见的形式是:Winform创建的窗体程序,设计的界面为一个文件(如:界面名称.Designer.cs),而对应的按钮触发事件业务逻辑在一个文件中(如:界面名称.cs)】
2开发大型项目时,需要多个程序员编写同一个类中的不同功能模块,此时就可以使用分部关键字(partial)各自创建相同类不同名称的文件编辑自己的功能模块,互不干扰
3需要对源生成器的类添加扩展功能且不能修改原生成器类,可以使用分部类实现

2.1.2、分部类的形式

 //公有的分部类 
 public partial class PersonBase
  {
       
        public void RecordKnowledge()
        {
            Console.WriteLine($"{this.GetType().Name} 在记录知识");
        }
        

   }//Class_end

  
  //私有分部类
  private partial class PersonBase
  {
       
        public void RecordKnowledge()
        {
            Console.WriteLine($"{this.GetType().Name} 在记录知识");
        }
        

   }//Class_end


  //公有抽象分部类
  public abstract partial class PersonBase
  {
       
        public void RecordKnowledge()
        {
            Console.WriteLine($"{this.GetType().Name} 在记录知识");
        }
        

   }//Class_end

    //分部接口
    partial interface IPerson
    {
        /// <summary>
        /// 具备的技能
        /// </summary>
        void SelfSkill(string skillContent);

        /// <summary>
        /// 使用的工具
        /// </summary>
        void UseTool();


    }//Class_end

    //分部抽象基类
    public abstract partial class PersonBase:IPerson
    {
        public void SelfSkill(string skillContent)
        {
            Console.WriteLine($"{this.GetType().Name} 掌握的技能为:{skillContent}");
        }

        protected void RecordKnowledge()
        {
            Console.WriteLine($"{this.GetType().Name} 在记录知识");
        }
        public void UseTool()
        {
            Console.WriteLine($"{this.GetType().Name} 会使用工具");
        }


    }//Class_end


    //艺术家分部类继承自公有分部抽象的PersonBase基类
    partial class Person: PersonBase
    {
        public void ArtCreate()
        {
            Console.WriteLine("\n------------------------------------------");
            Console.WriteLine($"艺术家对大家说:好久不见,各位");
            Console.WriteLine($"{this.GetType().Name} 艺术家家进行艺术创作");
            Console.WriteLine("------------------------------------------\n");
        }

    }//Class_end


    //数学家分部类可以直接使用公有分部抽象的PersonBase基类方法
    partial class Person
    {
        public void Thinking()
        {
            Console.WriteLine("\n------------------------------------------");
            Console.WriteLine($"数学家对大家说:嘿,我在这");
            Console.WriteLine($"{this.GetType().Name} 数学家进行思考");
            base.RecordKnowledge();
            base.UseTool();
            Console.WriteLine("------------------------------------------\n");
        }
        
        
    }//Class_end

三、分部方法

分部类可以包含分部方法【即:允许在一个分部类里面定义方法,而在另一个分部类里面实现这个方法】;常用于【生成样板代码的模板】;但是分部方法只能用于【Void】方法;如下所示:

    partial class Person
    {

        //【定义】拥有证书的分部方法
        partial void HaveCertificate();

        
    }//Class_end


    partial class Person
    {
        //实现分部类定义的【拥有证书的分部方法】
        partial void HaveCertificate()
        {
            Console.WriteLine($"这是数学家实现的证书");
        }

    }//Class_end

 

四、其他学习资料

分部类和方法 - C# 编程指南 | Microsoft Docsicon-default.png?t=M3K6https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/partial-classes-and-methods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛奶咖啡13

我们一起来让这个世界有趣一点…

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值