【问题标题】: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);
    }
    }
    

    【讨论】:

    • 谢谢。如果您有相同的代码 sn-p 会更清楚
    【解决方案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
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 2019-06-08
      • 2012-08-08
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多