クラスがあれば
public class Person
{
private const string MyConst = "SomeValue";
[MyAttribute(MyConst)]
public string Name {get;set;}
}
他のクラス内でMyConst
は、すべてをカプセル化したままにして、最善の方法にアクセスしたいと思いますか? それは正しい Person クラスですか?
クラスがあれば
public class Person
{
private const string MyConst = "SomeValue";
[MyAttribute(MyConst)]
public string Name {get;set;}
}
他のクラス内でMyConst
は、すべてをカプセル化したままにして、最善の方法にアクセスしたいと思いますか? それは正しい Person クラスですか?
MyConst
?を返すパブリック プロパティを作成します。
public string MyPublicConst {get{ return MyConst;} private set; }
-しかし、なぜこれをやりたいのですか?
パブリックにすることができます (Duh!)。定数から別のものに変更する予定がある場合は、プロパティを使用してカプセル化できます。また、それを返すメソッドを使用することもできます。
それはすべて、MyConst で必要な保護に依存します。Person 以外のボディがこのプロパティを読み書きできない場合は、Get メソッドまたは Set メソッドを使用して公開しないでください。誰もがこれを読み取ることができるが書き込むことができない場合は、読み取り専用プロパティを介して公開できます。1 つのクラス (ClassB など) だけがそれを読み取ることができる場合は、ClassB オブジェクトを受け取り、それにプライベート Const を渡す関数を Person に提供できます。
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 のみを含めることです。