①万事屋の人員データを管理するする必要が生じた為、YorozuyaMemberクラスを作りました。
//このクラスはDBから取得したエンティティクラスのつもり。
public class YorozuyaMember
{
public string ID { get; set; }
public string YorozuyaMemberName { get; set; }
}
public class Program
{
static void Main(string[] args)
{
//出力結果
//1 坂田銀時
//2 定春
TeacherList.ForEach(t => Console.WriteLine(t.TeacherName));
Console.ReadLine();
}
//データ登録処理
static List<YorozuyaMember> YorozuyaMemberList = new List<YorozuyaMember>()
{
new YorozuyaMember{ID = "1", YorozuyaMemberName = "坂田銀時" },
new YorozuyaMember{ID = "2", YorozuyaMemberName = "定春" }
};
}
②数か月後・・・攘夷派データを管理する必要も出てきたので追加しました。
//このクラスはDBから取得したエンティティクラスのつもり。
public class YorozuyaMember
{
public string ID { get; set; }
public string YorozuyaMemberName { get; set; }
}
//このクラスもDBから取得したエンティティクラスのつもり。
public class JouihaMember
{
public string ID { get; set; }
public string JouihaMemberName { get; set; }
}
public class Program
{
static void Main(string[] args)
{
//出力結果
//1 坂田銀時
//2 定春
//1 桂小太郎
//2 エリザベス
YorozuyaMemberList.ForEach(y => Console.WriteLine(y.ID + " " + y.YorozuyaMemberName));
JouihaMemberList.ForEach(j => Console.WriteLine(j.ID + " " + j.JouihaMemberName));
Console.ReadLine();
}
//万事屋データ登録処理
static List<YorozuyaMember> YorozuyaMemberList = new List<YorozuyaMember>()
{
new YorozuyaMember{ID = "1", YorozuyaMemberName = "坂田銀時" },
new YorozuyaMember {ID = "2", YorozuyaMemberName = "定春" }
};
//攘夷派データ登録処理
static List<JouihaMember> JouihaMemberList = new List<JouihaMember>()
{
new JouihaMember{ID = "1", JouihaMemberName = "桂小太郎" },
new JouihaMember{ID = "2", JouihaMemberName = "エリザベス" }
};
}
③じゃあ、万事屋と攘夷派を無差別ミックスして名前の五十音順に表示して、という事になりました。
とりあえず万事屋と攘夷派を1つのリストに出来ればと思ったけど、
YorozuyaMemberListにはJouihaMemberを追加出来ず、JouihaMemberListにはYorozuyaMemberを追加出来ません。
Listを参照する側(Programクラス)から見れば、万事屋も攘夷派も同列要素として扱いたいので、
両クラスを同じ人間として扱えるようにPersonインターフェイスを定義し、万事屋と攘夷派に実装する事にしました。
interface Person
{
//Programクラスから変更されないように、getのみ。
string ID { get; }
string Name { get; }
}
//このクラスはDBから取得したエンティティクラスのつもり。
public class YorozuyaMember : Person
{
public string ID { get; set; }
public string YorozuyaMemberName { get; set; }
//インターフェイス Person の Name プロパティを実装する必要がある。
public string Name => YorozuyaMemberName;
}
//このクラスもDBから取得したエンティティクラスのつもり。
public class JouihaMember : Person
{
public string ID { get; set; }
public string JouihaMemberName { get; set; }
//インターフェイス Person の Name プロパティを実装する必要がある。
public string Name => JouihaMemberName;
}
public class Program
{
static void Main(string[] args)
{
//Personリストを作り、万事屋と攘夷派のミックスリストを作る。
List<Person> PersonList = new List<Person>();
PersonList.AddRange(YorozuyaMemberList);
PersonList.AddRange(JouihaMemberList);
//名前順にソートして表示
PersonList.OrderBy(p => p.Name).ToList().ForEach(p1 =>
{
//出力結果
//2 エリザベス
//1 桂小太郎
//1 坂田銀時
//2 定春
Console.WriteLine(p1.ID + " " + p1.Name);
});
Console.ReadLine();
}
//万事屋データ登録処理
static List<YorozuyaMember> YorozuyaMemberList = new List<YorozuyaMember>()
{
new YorozuyaMember{ID = "1", YorozuyaMemberName = "坂田銀時" },
new YorozuyaMember {ID = "2", YorozuyaMemberName = "定春" }
};
//攘夷派データ登録処理
static List<JouihaMember> JouihaMemberList = new List<JouihaMember>()
{
new JouihaMember{ID = "1", JouihaMemberName = "桂小太郎" },
new JouihaMember{ID = "2", JouihaMemberName = "エリザベス" }
};
}
万事屋クラスも、攘夷派クラスも、他のクラス(Programクラス)に対して、同じ見た目とアクセス方法(Personインターフェイス)を提供出来ました。