13.内部类和分部类

13.面向对象-封装-内部类和分部类


13.1 知识点

知识回顾

class 类名
{
    #region 特征——成员变量
    #endregion
    #region 行为——成员方法
    #endregion
    #region 初始化调用——构造函数
    #endregion
    #region 释放时调用——析构函数
    #endregion
    #region 保护成员变量——成员属性
    #endregion
    #region 像数组一样使用——索引器
    #endregion
    #region 类名点出使用——静态成员
    #endregion
    #region 自定义对象可计算——运算符重载
    #endregion
}
#region 静态类和静态构造函数
#endregion
#region 拓展方法
#endregion

内部类

概念:在一个类中再申明一个类
特点:使用时要用包裹者点出自己
作用:亲密关系的变现
注意:访问修饰符作用很大

实例

// 人 类
class Person
{
    public int age;
    public string name;

    //身体 成员变量
    public Body body;

    // 内部 身体 类
    public class Body
    {
        //胳膊 成员变量
        Arm leftArm;
        Arm rightArm;

        //内部 胳膊 类
        class Arm
        {

        }
    }
}

主函数内

Person p = new Person();

//Body body = new Body();
//报错 内部类使用时要用包裹者点出自己
Person.Body body = new Person.Body();//正确用法

//Person.Body.Arm = new Person.Body.Arm();
//报错 胳膊类没有public 默认是私有 由于其保护级别而无法访问

分部类

概念:把一个类分成几部分申明
关键字:partial
作用:

  • 分部描述一个类
  • 增加程序的拓展性
    注意:
  • 分部类可以写在多个脚本文件中
  • 分部类的访问修饰符要一致
  • 分部类中不能有重复成员

实例

//学生 分布类1 
public partial class Student
{
    public bool sex;
    public string name;
}

//学生 分布类2 访问修饰符要和学生分布类1一致是public
public partial class Student
{
    public int number;
    //public bool sex;//报错 分部类中不能有重复成员
}

//可以写在多个脚本文件中 在实践中运用

主函数内

Student student1 = new Student();

//分布类其实就是相当于把一个类分成几部分申明而已 可以同时使用各个分布类的成员

//学生分布类1的变量
student1.name = "男";
//学生分布类2的变量
student1.number = 1;

分部方法

概念:将方法的申明和实现分离
特点:

  • 不能加访问修饰符 默认私有
  • 只能在分部类中申明
  • 返回值只能是 void
  • 可以有参数但不用 out 关键字
    局限性大,了解即可

学生分布类1内

//Speak方法的申明
partial void Speak();

学生分布类2内

//Speak方法的实现
partial void Speak()
{
    //实现逻辑
}

//Speak重载方法的实现
public void Speak(string str)
{

}

13.2 知识点代码

using System;

namespace Lesson11_封装_内部类和分部类
{
    #region 知识回顾
    class 类名
    {
        #region 特征——成员变量

        #endregion

        #region 行为——成员方法

        #endregion

        #region 初始化调用——构造函数

        #endregion

        #region 释放时调用——析构函数

        #endregion

        #region 保护成员变量——成员属性

        #endregion

        #region 像数组一样使用——索引器

        #endregion

        #region 类名点出使用——静态成员

        #endregion

        #region 自定义对象可计算——运算符重载

        #endregion
    }

    #region 静态类和静态构造函数

    #endregion

    #region 拓展方法

    #endregion

    #endregion

    //class语句块外 namespace语句块内

    #region 知识点一 内部类

    //概念
    //在一个类中再申明一个类

    //特点
    //使用时要用包裹者点出自己

    //作用
    //亲密关系的变现

    //注意
    //访问修饰符作用很大

    //实例
    // 人 类
    class Person
    {
        public int age;
        public string name;

        //身体 成员变量
        public Body body;

        // 内部 身体 类
        public class Body
        {
            //胳膊 成员变量
            Arm leftArm;
            Arm rightArm;

            //内部 胳膊 类
            class Arm
            {

            }
        }
    }

    #endregion

    #region 知识点二 分部类
    //概念
    //把一个类分成几部分申明

    //关键字
    //partial

    //作用
    //分部描述一个类
    //增加程序的拓展性

    //注意
    //分部类可以写在多个脚本文件中
    //分部类的访问修饰符要一致
    //分部类中不能有重复成员

    //实例
    //学生 分布类1 
    public partial class Student
    {
        public bool sex;
        public string name;

        //学生分布类1内
        #region 知识点三 分部方法
        //Speak方法的申明
        partial void Speak();
        #endregion
    }

    //学生 分布类2 访问修饰符要和学生分布类1一致是public
    public partial class Student
    {
        public int number;
        //public bool sex;//报错 分部类中不能有重复成员

        //学生分布类2内
        #region 知识点三 分部方法
        //Speak方法的实现
        partial void Speak()
        {
            //实现逻辑
        }

        //Speak重载方法的实现
        public void Speak(string str)
        {

        }
        #endregion
    }

    //可以写在多个脚本文件中 在实践中运用

    #endregion

    #region 知识点三 分部方法
    //概念
    //将方法的申明和实现分离
    //特点
    //1.不能加访问修饰符 默认私有
    //2.只能在分部类中申明
    //3.返回值只能是void
    //4.可以有参数但不用 out关键字

    //局限性大,了解即可
    #endregion
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("内部类和分部类");

            //主函数内

            #region 知识点一 内部类

            Person p = new Person();

            //Body body = new Body();
            //报错 内部类使用时要用包裹者点出自己
            Person.Body body = new Person.Body();//正确用法

            //Person.Body.Arm = new Person.Body.Arm();
            //报错 胳膊类没有public 默认是私有 由于其保护级别而无法访问

            #endregion

            #region 知识点二 分部类

            Student student1 = new Student();

            //分布类其实就是相当于把一个类分成几部分申明而已 可以同时使用各个分布类的成员

            //学生分布类1的变量
            student1.name = "男";
            //学生分布类2的变量
            student1.number = 1;

            #endregion
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏