• C# partial修饰符_分部类_分部方法


      今天翻了翻书,发现自己还是遗留下不少基础性的东西,老实说,不管一些基础的东西用到不用到都很应该了解,因为基础毕竟学习量不是很大。

    一、分部类

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

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

      1、分部类的特征

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

      代码示例:

    复制代码
        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 + "岁");
            }
        }
    复制代码

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

    二、分部方法

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

      分部方法的严格限制

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

       示例:

    复制代码
        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();
            }
        }
    复制代码
  • 相关阅读:
    ERP SYSTEM 开发指南(一)简单模块开发
    机器学习--决策树
    机器学习---线性模型
    机器学习
    《IDA Pro 权威指南》学习
    内核漏洞利用技术
    word2vec、seq2seq
    Ring0级的探索
    ActiveX 控件的漏洞挖掘
    FTP的漏洞挖掘
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3803706.html
Copyright © 2020-2023  润新知