C#面向对象特征之一——封装

封装

什么是封装?

封装是针对某一些数据进行,压缩、包装成一个使用方便安全的实例
1.被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实 现细节的访问。
2.抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使程序员实现所需级别的抽象。
3.封装使用访问修饰符来实现。一个访问修饰符定义了一个类成员的范围和可见性。

封装都有哪些封装

就是一个封装
属性封装
函数封装

访问修饰符都有哪些

public

public访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。所有类或成员,任何代码均可访问该项访问权限最大意味着最不安全
范围:类自己、同一个程序集、同一个项目中、和自己有血缘关系的类

private

private访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。
类的成员的默认访问修饰符是private
访问权限最小
意味着针对于对象自己而言最安全范围:类自己

protected

protected访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。类和内嵌类的成员,只有派生类可以访问该项
范围:类自身、具有血缘关系的类

internal

internal访问修饰符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,带有internal访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类或方法访问。类的默认访问修饰符是internal
范围:类自身、同一程序里面的所有类
protected internal/internal protected
protected internal访问修饰符允许一个类将其成员变量和成员函数对同一应用程序内的子类以外的其他的类对象和函数进行隐藏。这也被用于实现继承。类和内嵌类的所有成员,只能包含它的程序集和派生类型的任何代码中访问该项范围:类自身、同一程序里面的所有类、有血缘关系的类

属性封装
什么是属性封装

1.属性(Property)是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中 的成员变量或方法称为域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用访问器(accessors)让私有域的值可被读写或操作。
2.属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的访问器(accessors)。
3.例如,有一个名为Student的类,带有 age、name 和code的私有域。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。
4.访问器
属性(Property)的访问器(accessor)包含有助于获取(读取计算)或设置(写入)属性的可执行语句。访问器
(accessor)声明可包含一个get访问器、一个set访问器,或者同时包含二者。

属性和字段有什么关系

属性不保存数据字段用来存储数据;属性必须依赖一个字段
eg:

 public class Student
    {
        string id;
        public string Id
        {
            get { return id; }
            set {
                int x;
                bool isNumber = int.TryParse(value, out x); // 判断是否是数字
                if (isNumber)
                {
                    id = value;
                }
                else
                {
                    id = "0";
                }
            }
        }
        string name;
        // 第一种
       public string Name
        {
            get { return name; }
            set { name = value; }
        }
        char sex;
        // 第二种
        public string Sex { get => sex; set => sex = value;}
        string age;
        // 第三种 prop快捷键
       public int age { get; set; }
   }
方法封装

eg:

class Student
    {
     /// <summary>
        /// 斐波拉契数
        /// </summary>
        /// <param name="index">数字的个数</param>
        /// <returns></returns>
        public int Fib(int index)
        {
            if (index<1)
            {
                return 0;
            }
            else if (index==1||index==2)
            {
                return 1;
            }
            else
            {
                return Fib(index - 1) + Fib(index - 2);
            }
        }
    }
发布了117 篇原创文章 · 获赞 111 · 访问量 9647

猜你喜欢

转载自blog.csdn.net/dust__/article/details/103789483
今日推荐