访问修饰符VS属性

时间:2013-03-20 14:25:13

标签: c# asp.net class properties access-modifiers

访问修饰符的目的是隐藏数据成员以防止未经授权的访问。而Properties的目的是公开Access修饰符。访问修饰符的目的在哪里死亡。以下是示例。

public class Employee
{
    private int EmployeeID;
    private string Name;
    private int Salary;

    public int EID { get { return this.EmployeeID; } set { this.EmployeeID = value; } }
    public string EName { get { return this.Name; } set { this.Name = value; } }
    public int ESalary { get { return this.Salary; } set { this.Salary = value; } }
}

static void Main(string[] args)
{
    Employee Employee = new Employee();
    Employee.EName = "Zaheer";
}

在这里,我可以访问间接访问Name的属性EName。如果问题很愚蠢,那么任何评论都很抱歉。

4 个答案:

答案 0 :(得分:2)

你有点不对劲。属性是数据成员,访问修饰符是修改数据成员访问权限的属性。可以从外部访问属性,因为它们具有“公共”访问修饰符。

答案 1 :(得分:2)

私有领域的想法并不是没有任何方法可以通过类型之外的东西修改该值。如果这是真的,那将完全没用。私有领域的想法是禁止从该类型之外对成员本身进行直接访问,但是可以通过一些非私有成员允许有限程度的间接访问。与公共访问相比,这些公共成员将提供一些访问该领域的有限手段。

在你的特定例子中,确实没有太多的限制;任何具有实例的人都可以随时访问该值,或者任何具有实例的人可以随时设置该值。它仍然比公开暴露字段更受保护,例如,您无法通过方法上的ref参数直接创建对该字段的引用,但您可以说保护很少添加。当外部实体修改字段的能力以某种方式受到限制时,它变得更有用。也许它可以获取值而不设置它,也许某些值根本无法设置,也许它会以调用方法时任何外部实体从未直接指定的方式改变自己。

当天结束时的想法是方法/属性的定义将决定对底层字段的访问级别。这种访问级别可以从几乎完全到几乎没有。

答案 2 :(得分:1)

属性实际上是返回和设置字段值的方法的语法糖。因此,它们有几个优点:

  1. 属性可以执行其他检查。例如,您可以尝试将EID设置为负值或将EName设置为空字符串。
  2. 属性可以一次设置多个字段,以保持对象的内部数据一致。
  3. 属性可以在接口中使用,而字段则不能。
  4. 属性可以为getter和setter提供单独的访问修饰符。
  5. 但是,设置字段更有效,因为它没有调用方法的开销。

答案 3 :(得分:1)

您的示例属性非常简单,可以由自动属性替换。属性用于控制对字段的访问,而不仅仅是公开字段。

例如,如果您有一个名为EmailAddress的属性,则可能需要在分配之前检查正确的电子邮件地址的值。您可以在属性的setter中处理它并拒绝任何无效值。在直接公开字段时,无法在类中控制它。

这是属性的一个明显用途,但与使用字段相比还有其他用途和优势。