2013-10-10 146 views
1

我对封装有很大的困惑。我关于封装的概念是它仅用于数据隐藏。 我的代码:关于封装的概念

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现在封装 按我的概念。所以,封装在这里做的是通过 使用私有访问修饰符,我可以隐藏这个变量和 通过使用公共属性,我可以初始化这个变量而不使用 使用类变量。

这是关于封装的一切吗?如果我错了,请纠正我。

+0

请参阅:http://stackoverflow.com/questions/385361/what-are-the-different-types-of-encapsulation(除了顶部的答案)。 – Corak

+2

作为一个方面说明:您的variabel'_area'永远不会被使用。当使用autoproperties('{get; set;}'语法)时,后台文件会在场景*后自动创建*。 – Koen

+0

可能重复[为什么在没有逻辑涉及时使用属性?](http://stackoverflow.com/questions/11165326/why-use-properties-when-no-logic-is-involved) –

回答

4

这不只是信息隐藏

封装意味着一组相关的属性,方法和其他部件被作为一个单一的单元或对象处理。根据封装原则,类或结构体可以指定其每个成员在类或结构体之外进行编码的可访问性。不能从类或程序集外部使用的方法和变量可以隐藏,以限制编码错误或恶意漏洞的可能性。

+2

帮助防止编码错误 - 是的。但是你不会因封装而阻止任何“恶意漏洞”。 –

+0

@Rajesh,所以在这里我的代码没有实现你想表达的封装的概念? –

+0

现在Area和参数都是公开的,这意味着没有保护或限制外部使用。如果你的系统需要一些保护,只有区域可以暴露,并且参数应该只暴露给相同的组件,你可以为参数设置受保护的设置。在这种情况下,它被封装 –