インターフェイスのプロパティ (C# プログラミング ガイド)

interface でプロパティを宣言することができます。 次の例では、インターフェイス プロパティ アクセサーが宣言されます。

public interface ISampleInterface
{
    // Property declaration:
    string Name
    {
        get;
        set;
    }
}

インターフェイス プロパティには通常、本体がありません。 プロパティが読み取り/書き込み、読み取り専用、書き込み専用のうちのどれであるかは、アクセサーによって示されます。 クラスや構造体の場合とは異なり、本体なしでアクセサーを宣言した場合、自動実装プロパティは宣言されません。 インターフェイスで、プロパティを含むメンバーの既定の実装を定義できます。 インターフェイスでプロパティの既定の実装を定義することはまれです。インターフェイスでは、インスタンス データ フィールドが定義されないことがあるためです。

この例では、インターフェイス IEmployee に読み取り/書き込み専用のプロパティ Name および読み取り専用のプロパティ Counter があります。 クラス EmployeeIEmployee インターフェイスを実装し、これら 2 つのプロパティを使用します。 プログラムは、新しい従業員の名前と現在の従業員の数を読み込んで、従業員の名前と計算した従業員番号を表示します。

メンバーが宣言されているインターフェイスを参照するプロパティの完全修飾名を使用することができます。 次に例を示します。

string IEmployee.Name
{
    get { return "Employee Name"; }
    set { }
}

前の例では、明示的なインターフェイス実装を確認できます。 たとえば、Employee クラスが 2 つのインターフェイス ICitizenIEmployee を実装し、両方のインターフェイスが同じ Name プロパティを持っている場合、明示的なインターフェイス メンバーの実装が必要です。 つまり、次のプロパティの宣言があります。

string IEmployee.Name
{
    get { return "Employee Name"; }
    set { }
}

これは、IEmployee インターフェイスで Name プロパティを実装します。次の宣言があります。

string ICitizen.Name
{
    get { return "Citizen Name"; }
    set { }
}

これは、ICitizen インターフェイスで Name プロパティを実装します。

interface IEmployee
{
    string Name
    {
        get;
        set;
    }

    int Counter
    {
        get;
    }
}

public class Employee : IEmployee
{
    public static int numberOfEmployees;

    private string _name;
    public string Name  // read-write instance property
    {
        get => _name;
        set => _name = value;
    }

    private int _counter;
    public int Counter  // read-only instance property
    {
        get => _counter;
    }

    // constructor
    public Employee() => _counter = ++numberOfEmployees;
}
System.Console.Write("Enter number of employees: ");
Employee.numberOfEmployees = int.Parse(System.Console.ReadLine());

Employee e1 = new Employee();
System.Console.Write("Enter the name of the new employee: ");
e1.Name = System.Console.ReadLine();

System.Console.WriteLine("The employee information:");
System.Console.WriteLine("Employee number: {0}", e1.Counter);
System.Console.WriteLine("Employee name: {0}", e1.Name);

サンプル出力

Enter number of employees: 210
Enter the name of the new employee: Hazem Abolrous
The employee information:
Employee number: 211
Employee name: Hazem Abolrous

関連項目