-3

如果我有课

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

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

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

4

5 回答 5

1

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

其他任何事情都介于拒绝和代码异味之间。

于 2013-11-08T21:48:41.570 回答
0

做一个返回的公共财产MyConst

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

于 2013-11-08T21:34:01.763 回答
0

您可以将其公开(Duh!),如果您打算将其从常量更改为其他内容,则可以使用属性来封装它,或者您可以有一个方法将其返回给您。

于 2013-11-08T21:34:10.250 回答
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);
   }

}

[编辑]

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

于 2013-11-08T21:37:50.220 回答
0
class Encapsulation{ 
            private string a;

            public string AccessValue(){

                return a;
            }
         }

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

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

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

class Player{ string b = Encapsulaion.AccessValue()}
于 2019-09-06T16:52:35.287 回答