だから私が得た値を設定するために、クラス内のフィールドまたはプロパティを使用する必要があります:私はコードの一部を超える同僚との友好引数に
public sealed class NewObject
{
private string _stuff = string.Empty;
public string Stuff
{
get { return GetAllStuff(); }
}
private string GetAllStuff()
{
//Heavy string manipulation of _stuff
}
public NewObject(string stuffToStartWith)
{
_stuff = stuffToStartWith;
}
public static NewObject operator +(NewObject obj1, NewObject obj2)
{
if (obj1 == null)
throw new ArgumentNullException();
if (obj2 == null)
throw new ArgumentNullException();
NewObject result = new NewObject(string.Empty);
result._stuff = String.Concat(obj1._stuff, obj2._stuff);
return result;
}
}
引数は、演算子のオーバーライドを超えていました。私の同僚は、コンストラクタ以外のプライベートフィールドの値を設定するのがプログラミングのベストプラクティスではないと感じています。私の同僚が提案した解決策は、Stuff
プロパティの名前をAllStuff
にリファクタリングし、get
とset
アクセサを持つプロパティStuff
を追加し、オペレータオーバーライドで新しいStuff
プロパティを使用することでした。
public static NewObject operator +(NewObject obj1, NewObject obj2)
{
if (obj1 == null)
throw new ArgumentNullException();
if (obj2 == null)
throw new ArgumentNullException();
NewObject result = new NewObject(string.Empty);
result.Stuff = String.Concat(obj1.Stuff, obj2.Stuff);
return result;
}
私はそれに似ています。私はクラスの外でプロパティを読み取り専用に保つので、最初の方法が優れていると感じています。私の質問は、どのようにオブジェクト指向設計のベストプラクティスですか?
@cyber:これはもっとOPの問題ではないと思います。彼の同僚は、コンストラクタやプロパティの実装の外で直接的にプライベート変数を変更しないことを提唱していたように私には聞こえました。私は彼がオブジェクトの生活のために同じ値を保つことを主張していたとは思わない。 –