転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

C#を勉強する③_インターフェイスについて

静的メソッドとインスタンスについて

静的メソッドからは、自分自身のインスタンスを呼び出せない。よく例にあげられるのが、Mainメソッドでのこと。
このように、静的メソッド内では、自分自身のインスタンスメソッドは呼び出せない。

// 静的メソッドとして定義
public static void Main(string[] args) {

    for(int feet=1; feet<=10; feet++) {
        // 静的メソッド内では、自身のインスタンスメソッドは呼び出せない
        double meter = FeetToMeter(feet); 
        Console.WriteLine("{0} f = {1:0.0000}m", feet, meter);
    }
}

static double FeetToMeter(int feet) {
    return feet * 0.3048;
}

インターフェイスの考え方

public class List : IList, ICollection, ,,,,,,, IEnumerable,
Listクラスは、IListインターフェイスが定義しているメソッドやプロパティを持っている⇨Listクラスは、IListインターフェイスを実装していると、この記述から読み取れる。
なお、.NET Frameworkが提供しているインターフェイスには接頭辞Iが付いている。

インターフェイスの基本的な考えとして
・AクラスがIXインターフェイスを実装していると、AオブジェクトはIX型の変数に代入できる。
・IX型の変数は、IXインターフェイスが定義するプロパティ、メソッドが使える。
・プロパティやメソッドの具体的な動作は、IXインターフェイスではなく、Aクラスに実装されている。

上を例で示す。

List<int> list = new List<int>() {1, 2, 3, 4, 5 };

// Listクラスは、IColliction<T>のインターフェイスを持っているので変数に代入できる
ICollection<T> collection = list;

// collection変数は、ICollection<T>型のプロパティやメソッドが使える
var count = collection.Count;
collection.Add(6);

また、別の例として

// これだと、List<T>しか受け付けていない
private List<Sale> _sales;

// インターフェイスに変えると、IEnumerable<T>を実装しているすべてのクラスが使える
private IEnumerable<Sale> _sales;

暗黙の型指定varの使い方

List<Sale> sales = new List<Sale>();

// varを使ってかくと
var sales = new List<Sale>();