如果我有课
public class Person
{
private const string MyConst = "SomeValue";
[MyAttribute(MyConst)]
public string Name {get;set;}
}
并且在其他类中我想访问MyConst
最好的方法是什么,保持所有封装?这是正确的人类吗?
答案 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()}