0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C# インターフェイスのメリットがフワッと分かるかもしれないサンプル

Posted at

①万事屋の人員データを管理するする必要が生じた為、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インターフェイス)を提供出来ました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?