美文网首页
13-01-封装

13-01-封装

作者: D丝学编程 | 来源:发表于2021-04-06 09:09 被阅读0次

    (1)广义:将多个数据定义和行为定义装起来。

    (2)狭义:将属性私有化,通过公有化的方式进行操作,提高代码的安全性。

    看如下没有封装的例子:

    创建一个员工类:

    public class Employee {
        //public:公有,所有地方都可以访问,private:私有,只有自己内部可以访问     
        //不封装
        public string empNO;  //工号
        public string empName;  //姓名
        public string empSex; //性别
        //方法
        public void sayHi()  //自我介绍
        {
            Console.WriteLine("大家好");
            Console.WriteLine("我的学号是:"+this.empNO);
            Console.WriteLine("我的姓名是:" + this.empName);
            Console.WriteLine("我的性别是:" + this.empSex);
        }
    }
    

    在main方法中创建员工,并且为字段赋值,调用sayHi()方法打印信息。

    Employee emp = new Employee();
    emp.empNo = "001";
    emp.empName = "张三";
    emp.empSex = "中";
    emp.sayHi();
    

    我们可以看到,当我们对性别赋值错误,程序没有做任何处理,直接执行成功了,并且将错误的性别可以直接通过sayHi()方法打印出来。


    为了解决此代码安全性问题,我们可以进行属性封装。

    C#中将字段封装成属性,需要将字段设置成private私有,然后添加public的属性,指定get,set访问器:

    public class Employee {
        //public:公有,所有地方都可以访问,private:私有,只有自己内部可以访问 
        //封装
        private string empNO;  //学号
        //属性封装的基本语法格式,其中get表示属性可读,set表示属性可写。
        public string EmpNo
        {
            get{return empNO;}
            set{empNO=value;}
        }
        
        //如果不需要做任何控制,可以省略私有成员,简写如下
        public string EmpName{get;set;}
        
        private string empSex; //性别 
        //如果对性别进行属性封装,规定性别赋值只能是“男”或“女”
        public string EmpSex
        {
            get { return empSex; }
            set {
                if (value.Equals("男") || value.Equals("女"))
                {
                    empSex = value;
                }
                else
                {
                    empSex = "";
                    Console.WriteLine("性别输入有错误!");
                }
            }
        }
        
        //方法
        public void sayHi()  //自我介绍
        {
            Console.WriteLine("大家好");
            Console.WriteLine("我的学号是:"+this.EmpNO);
            Console.WriteLine("我的姓名是:" + this.EmpName);
            Console.WriteLine("我的性别是:" + this.EmpSex);
        }
    }
    

    在main方法中创建员工,并且给属性赋值,调用sayHi()方法打印信息。

    Employee emp = new Employee();
    emp.EmpNo = "001";
    emp.EmpName = "张三";
    emp.EmpSex = "中";
    emp.sayHi();
    

    此时,程序可以进行性别的判断,将错误值进行屏蔽,打印出来的信息中性别是空的。

    相关文章

      网友评论

          本文标题:13-01-封装

          本文链接:https://www.haomeiwen.com/subject/jszlxltx.html