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 知识点代码
Lesson13_封装_内部类和分部类.cs
using System;
namespace Lesson13_封装_内部类和分部类
{
    #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