【问题标题】:Concept about ENCAPSULATION关于封装的概念
【发布时间】:2013-10-17 20:19:54
【问题描述】:

我对封装很困惑。我目前的封装概念是它只用于数据隐藏。

我的代码:

class Program
    {
        static void Main(string[] args)
        {
            Shape a;
            a= new Shape();
            a.Area = 4;
            Console.WriteLine(a.Area);
        }
    }

    class Shape
    {
        private int _area = 0;
        private int _parameter = 0;
        public int Area { get; set; }
        public int Parameter { get; set; }

    }

据我了解,私有 int 变量 _area 现在已被封装。所以,这里的封装是通过 使用私有访问修饰符,我可以隐藏这个变量;和 通过使用公共属性,我可以在没有的情况下初始化这个变量 使用类变量。

这就是封装的全部意义吗?如果我错了,请纠正我。

【问题讨论】:

  • 见:stackoverflow.com/questions/385361/…(除了最佳答案)。
  • 附带说明:您的变量 _area 永远不会被使用。当使用自动属性({get; set;} 语法)时,backingfiled 会自动在后台创建。
  • @Koen,那个支持域应该做什么?
  • 写一个不带封装的class CalenderDate (public int Y,M,D;),然后作为类的编写者,尽量保证实例将始终包含有效日期。

标签: c# oop encapsulation


【解决方案1】:

不仅仅是信息隐藏

封装意味着将一组相关的属性、方法和其他成员视为一个单元或对象。

根据封装的原则,一个类或结构可以指定其每个成员对类或结构之外的代码的可访问性。可以隐藏不打算从类或程序集外部使用的方法和变量,以限制编码错误或恶意攻击的可能性。

【讨论】:

  • 帮助防止编码错误 - 是的。但是您不会通过封装阻止任何“恶意攻击”。
  • @Rajesh,所以这里我的代码没有实现你的意思是封装的概念?
  • 现在区域和参数都是公开的,这意味着对外部使用没有保护或限制。如果您的系统需要一些保护,例如只能公开区域并且参数应该只公开给相同的程序集,您可以为参数设置受保护的设置。在这种情况下,它被封装
  • @Henk 如果我们明智地使用封装,可以避免恶意攻击,如果你有一个具有连接字符串的公共属性的类,它可以用于sql server连接细节
  • 封装绝对与安全无关。那是一种误解。解决方法很多,反射是最简单的。
猜你喜欢
  • 1970-01-01
  • 2018-09-20
  • 2016-05-08
  • 2011-04-23
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多