c#在其他类上访问私有常量的正确方法

时间:2013-11-08 21:31:11

标签: c# encapsulation

如果我有课

public class Person
{
    private const string MyConst = "SomeValue";

    [MyAttribute(MyConst)]
    public string Name {get;set;}
}

并且在其他类中我想访问MyConst最好的方法是什么,保持所有封装?这是正确的人类吗?

5 个答案:

答案 0 :(得分:1)

如果您希望从其他课程访问MyConst,则不再封装它。围绕此添加属性或方法调用并不意味着它是封装的。这是一个常数。它无法改变。所以要么是公开的,要么不是。如果另一个类需要访问,请将其设置为内部或公共。

其他任何东西都在拒绝和代码气味之间。

答案 1 :(得分:0)

创建一个返回MyConst的公共属性?

public string MyPublicConst {get{ return MyConst;} private set; } - 但为什么要这样做?

答案 2 :(得分:0)

你可以把它公之于众(Duh!),你可以使用一个属性来封装它,如果你打算将它从一个常量更改为其他东西,或者你可以有一个方法将它返回给你。

答案 3 :(得分:0)

这一切都取决于您在MyConst上需要的保护。如果没有任何主体应该能够读取或写入除Person之外的此属性,则不应通过Get或Set方法公开它。如果每个人都可以阅读但不能写这个,那么你可以通过只读属性公开它。如果只有一个类(例如ClassB)可以读取它,那么你可以在Person中提供一个接受ClassB对象并将私有Const传递给它的函数:

public class ClassB
{
    private string ConstValue {get; set;}
    public void SetConstValue(string constValue)
    {
       ConstValue = constValue;
    }

    public void GetConstFromPerson(Person p)
    {
       p.GetConstValue(this);
    }
}


public class Person
{
   private const string MyConst = "A";


   public void GetConstValue(ClassB obj)
   {
       //todo: contract validations
       obj.SetConstValue(MyConst);
   }

}

[编辑]

另一种解决方案是将常量定义为内部,并且在程序集中只有Person和CLassB

答案 4 :(得分:0)

class Encapsulation{ 
            private string a;

            public string AccessValue(){

                return a;
            }
         }

您可以对我认为的任何变量执行此操作,肯定是简单的变量。

这是来自同一类的公共方法,该方法返回相同的私有字符串值。 这样,您可以从类外部获取值,而无需将其声明为公共。

要从另一个班级获得它,您只需编写:

class Player{ string b = Encapsulaion.AccessValue()}