は、次のコードを検討存在する場合、孤児ですなぜオブジェクトは、作成者が
public class City
{
public string Name { get { return "New York"; } }
Building empEstate;
Building nyTimes;
public void Init()
{
// I hate passing "this" to all object
empEstate = new EmpEstate(this);
setSomeProperty(empEstate);
// any one can create new object of some other city
// and pass to the building
nyTimes = new NYTimes(this);
...
other = new OtherBuildings(this)
}
public void PrintAddresses()
{
empEstate.Print();
nyTimes.Print();
...
other.Print();
}
}
public abstract class Building {
City _city;
public Building(City city){
this._city = city;
}
public abstract string Name { get;}
public void Print(){
Console.WriteLine(this.Name);
Console.Write(",");
Console.WriteLine(this._city.Name);
}
}
私はこのアプローチのよりよい解決策を望んで最初のもの。印刷は単なる例です。実際には、各建物オブジェクトはCityオブジェクトに対して何らかのイベントを発生させます。私は都市にいくつかの建物が存在する可能性があるので、各建物にハンドラを追加したくありません。また、各建物の2つのタスク(1つの初期化と2つ目のリストへの追加、1つは新しい建物の作成時にリストに追加することを忘れてしまいます)をリストに追加したくありません。このため、コントロールの親プロパティ(これはthis.Controlsに追加されていますが)のように呼び出し元に自動的に呼び出されるようにします。
メモリを使用して、誰が現在のオブジェクトの親であるかを知ることができます。オブジェクトが参照されていないことをGCがどのように知っているか(作成者を含む)メモリを使用して呼び出し元オブジェクトを識別するメソッド(安全かどうか)を作成できません。私はStackTraceを使って呼び出しの階層を見ることができます。新しいオブジェクトが作成されたときにここで傍受できますか?
あなたは 'parent'でも何を意味しますか? – CodesInChaos
親は、オブジェクトが宣言されたオブジェクトまたは作成されたオブジェクトを言うことができます。 – hungryMind