【问题标题】:Attributes: Access Designation属性:访问指定
【发布时间】:2011-12-15 17:38:33
【问题描述】:
当我参考一本书时,我得到了以下陈述:
当一个数据类型或方法被定义为 public 时,其他对象可以直接访问它。当一个数据类型或方法被定义为 private 时,只有特定的对象可以访问它。
现在这真是令人困惑。 Public 和 Private 是访问说明符,仅定义属性或方法的范围。
为什么对象与访问说明符混合在一起?对象是否必须与 public 、 private 或 protected 做任何事情,除了如果某些事情被定义为 public 那么对象也将能够访问而不管范围
【问题讨论】:
标签:
c#
oop
private
public
private-members
【解决方案1】:
Public 和 Private 是仅定义范围的访问说明符
属性或方法。
这定义了对象的行为。因此,访问说明符对对象很重要。想象一下,如果您有一个外观类型的对象,您不想公开操作的所有细节,而是希望向消费者公开一个简单的公共接口(例如 Save() 方法)。这就是为什么你必须考虑对象的说明符。
public class CustomerFacade()
{
public bool Save(Customer c)
{
VerifyCustomer(c);
// lots of other steps which the caller does not need to know
SaveorUpdateCustomer(c);
}
private void VerifyCustomer(Customer c)
{
}
private void SaveorUpdateCustomer(Customer c)
{
}
}
public class CustomerController()
{
public bool Save(Customer c)
{
return new CustomerFacade().Save(c);
}
}
【解决方案2】:
这不是范围问题,而是访问限制修饰符。如果您将函数声明为私有,则意味着只有该类可以调用该函数。
公开:
任何人都可以调用这些函数
私人的:
只有那个类和反射引擎
受保护:
只有该类及其派生成员
内部的:
对该程序集中的所有类公开
一个小前任
public class A
{
public int x;
protected int y;
private int z;
}
public class B : A
{
public int CallPro()
{
return y;
}
public int CallPriv()
{
return z; //error
}
}
static void Main()
{
A oa;
oa.x; //Fine
oa.y; //Error
oa.z; //Error
}