访问修饰符VS属性
本文关键字:VS 属性 访问 | 更新日期: 2023-09-27 18:04:48
访问修饰符的目的是隐藏数据成员,防止未经授权的访问。而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";
}
这里我可以访问属性EName,它间接访问Name。如果这个问题很傻,有什么评论吗?
私有字段的概念并不是说该值无论如何都不能被类型外部的东西修改。如果这是真的,它们就完全没用了。私有字段的思想是禁止在类型外部直接访问成员本身,但允许通过一定数量的非私有成员进行有限程度的间接访问。这些公共成员将提供比公共访问更有限的访问方式。
在您的特定示例中,确实没有太多限制发生;任何拥有实例的人都可以在任何时间访问该值,或者任何拥有实例的人都可以在任何时间设置该值。它仍然比公开暴露字段更受保护,例如,您不能通过方法上的ref
参数直接创建对字段的引用,但是您说添加的保护很少是对的。当外部实体修改字段的能力在某种程度上受到限制时,它变得更加有用。也许它可以获取值而不设置它,也许某些值根本不能设置,也许它会以任何外部实体在调用方法时从未直接指定的方式改变自己。
最终的想法是方法/属性的定义将决定对底层字段的访问级别。这种级别的访问可以从几乎完成到几乎没有。
你搞错了。属性是数据成员,访问修饰符是修改对数据成员的访问的修饰符。属性可以从外部访问,因为它们具有"public"访问修饰符。
属性实际上是返回和设置字段值的方法的语法糖。因此,它们有几个优点:
- 属性可以执行额外的检查。例如,您可以捕获将
EID
设置为负值或将EName
设置为空字符串的尝试。 - 属性可以一次设置多个字段,以保持对象内部数据的一致性。
- 属性可以在接口中使用,而字段不能。
- 属性可以有单独的getter和setter访问修饰符。
但是,设置一个字段更有效,因为它没有调用方法的开销。
您的示例属性都非常简单,可以用自动属性替换。属性用于控制对字段的访问,而不仅仅是公开字段。
作为一个例子,如果您有一个名为EmailAddress
的属性,您可能想要在分配一个合适的电子邮件地址之前检查它的值。你可以在属性的setter中处理它并拒绝任何无效的值。当你直接公开一个字段时,你不能在你的类中控制它。
这是属性的一个明显的用途,但是与使用字段相比,还有其他用途和优点。