• 【c# 学习笔记】封装


        封装 指的是把类内部的数据隐藏起来,不让对象实例直接对其操作。c#中提供了属性机制来对类内部的状态进行操作。

      在c#中,封装可以通过Public、Private、Protected和Internal等关键字来体现。

        为什么要将类内部的数据封装起来?如下:

        

        //不使用封装特性来定义一个Person类
        public class Person
        {
            public string _name;
            public int _age;
        }

       当把字段定义为公共类型时,外部对象可以对类内部的数据进行任意的操作,很可能导致当前值不符合系统的业务逻辑。如下:

      

            static void Main(string[] args)
            {
    
                Person p = new Person();
                p._name = "肖烨";
    
                //-5赋值给age字段显然是不符合业务逻辑的,人的年龄不可能为负。
                p._age = -5;
    
                Console.Read();
            }

      如上代码中,尽管把-5赋给Person的_age属性没有引起编译错误,但这并不符合业务逻辑,因为在现实生活中,人的年龄不可能为负值。当我们把类的字段

    定义为公共类型时,外部对象可以直接对类内部的数据进行操作,此时无法对这些操作进行一些逻辑判断,这就是公共数据的问题所在。

      面向对象编程中的封装特性,是一种保护状态数据完整性的方法,在面向对象编程中,应更多地定义私有数据字段。c#提供属性机制来对这种私有字段数据

    进行间接的操作,并且可以在属性的定义中加入更多的逻辑判断。利用封装技术,我们可以有效地对外部隐藏类内部的数据,从而避免数据损坏。如下演示:

        public class Person
        {
            private  string _name;
            private  int _age;
    
            public string Name
            {
                get { return _name; }
                set {_name = value ; }
            }
    
            public int Age
            {
                get { return _age; }
                set
                {
                    //在属性定义中,可以根据系统的业务逻辑添加逻辑代码
    
                    if(value < 0 || value >120)
                    {
                        throw (new ArgumentOutOfRangeException("AgeIntPropery", value, "年龄必须在0-120之间"));
                        _age = value;
                    }
                }
            }
        }

      使用了封装技术之后,外部数据只能对属性进行操作。如果把不符合逻辑的值赋给属性Age,就会在运行时抛出异常,客户端调用可以通过捕获该异常,进行

    相关的错误处理操作。

  • 相关阅读:
    KM匹配模板
    BestCoder 1st Anniversary 1002-1005
    SGU 106 The equation
    sgu 104 Little shop of flowers
    SGU Magic Pairs
    关于 “'sqlite3' 不是内部或外部命令.....”问题
    通过django 速成 blog
    windows 通过appache链接cgi程序
    A Lot of Games(Trie树 + 博弈)
    树的点分治 (poj 1741, 1655(树形dp))
  • 原文地址:https://www.cnblogs.com/xiaoyehack/p/9209192.html
Copyright © 2020-2023  润新知