分類:[C#]
はじめまして、ふわりと申します。
タイトルの通り、相互参照可能なクラスを実装したいと考えております。
相互参照という言葉が適当かどうかは分かりかねるのですが、
イメージとしては、DataSetとDataTableの間にある、以下のような関係のことを指します。
DataSet ds = new DataSet("DS1");
DataTable dt = new DataTable("DT1");
Console.WriteLine(dt.DataSet == null ? "nullです" : dt.DataSet.DataSetName); // Add前は、null
ds.Tables.Add(dt);
Console.WriteLine(dt.DataSet == null ? "nullです" : dt.DataSet.DataSetName); // Add後は、DataSetへの参照を持っている
上記を踏まえて、Bushoクラス⇔Memberクラスを作成し、
メンバーのインスタンスから、そのメンバーが所属する部署を参照可能にしたいと考えております。
以下、とりあえず出来ているかな?程度のコードになるのですが、
果たしてこのような実装が定石かどうかわからず、悩んでおります。
(もっとスマートなデザインパターン(?)として確立されているのかどうか…とか。)
アドバイスの程、よろしくお願いいたします。
class Busho
{
private string _Name = null;
private MemberCollection _Collection = null;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
public MemberCollection Members
{
get
{
return _Collection;
}
}
public Busho(string name)
{
_Name = name;
_Collection = new MemberCollection();
_Collection.Busho = this; // メンバーコレクションから、部署を参照可能にする。
}
}
class MemberCollection// : ICollection<Member> 後で実装予定
{
private List<Member> _Collection = new List<Member>();
private Busho _Parent = null;
internal Busho Busho
{
get
{
return _Parent;
}
set
{
_Parent = value;
}
}
public void Add(Member member)
{
// 追加可否チェック。不可の場合は例外。
// if...
member.Parent = this; // メンバーから、コレクションを参照可能にする。
_Collection.Add(member);
}
public bool Remove(Member member)
{
member.Parent = null;
return _Collection.Remove(member);
}
}
class Member
{
private string _Name = null;
private MemberCollection _Parent = null;
internal MemberCollection Parent
{
get
{
return _Parent;
}
set
{
_Parent = value;
}
}
public Busho Busho
{
get
{
if (_Parent == null)
{
return null;
}
return _Parent.Busho;
}
}
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
public Member()
{
}
public Member(string name)
: this()
{
_Name = name;
}
}
|