0

访问修饰符的目的是隐藏数据成员免受未经授权的访问。而 Properties 的目的是公开访问修饰符。访问修饰符的目的消失了。以下是示例。

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";
}

在这里我可以访问间接访问名称的属性 EName。如果问题很愚蠢,请发表任何评论并抱歉。

4

4 回答 4

2

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

于 2013-03-20T14:28:51.380 回答
2

私有字段的想法并不是说无论如何都无法通过类型外部的某些东西来修改该值。如果这是真的,它们将完全没有用。私有字段的想法是禁止从类型外部直接访问成员本身,但可以通过一定数量的非私有成员允许有限程度的间接访问。与公共访问相比,这些公共成员将提供一些更有限的访问该领域的方法。

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

归根结底,方法/属性的定义将决定对底层字段的访问级别。这种访问级别可以从几乎完全到几乎没有。

于 2013-03-20T14:55:42.810 回答
1

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

  1. 属性可以执行额外的检查。EID例如,您可以捕获设置为负值或EName空字符串的尝试。
  2. 属性可以一次设置多个字段,以保持对象内部数据的一致性。
  3. 属性可以在接口中使用,而字段不能。
  4. 属性可以有单独的 getter 和 setter 访问修饰符。

但是,设置字段更有效,因为它没有调用方法的开销。

于 2013-03-20T14:33:27.460 回答
1

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

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

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

于 2013-03-20T14:34:23.260 回答