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

interface でプロパティを宣言することができます。Properties can be declared on an interface. 次の例では、インターフェイス プロパティ アクセサーが宣言されます。The following example declares an interface property accessor:

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

インターフェイス プロパティには通常、本体がありません。Interface properties typically don't have a body. プロパティが読み取り/書き込み、読み取り専用、書き込み専用のうちのどれであるかは、アクセサーによって示されます。The accessors indicate whether the property is read-write, read-only, or write-only. クラスや構造体の場合とは異なり、本体なしでアクセサーを宣言した場合、自動実装プロパティは宣言されません。Unlike in classes and structs, declaring the accessors without a body doesn't declare an auto-implemented property. C# 8.0 以降では、インターフェイスによって、プロパティを含む、メンバーの既定の実装を定義できます。Beginning with C# 8.0, an interface may define a default implementation for members, including properties. インターフェイスでプロパティの既定の実装を定義することはまれです。インターフェイスでは、インスタンス データ フィールドが定義されないことがあるためです。Defining a default implementation for a property in an interface is rare because interfaces may not define instance data fields.

Example

この例では、インターフェイス IEmployee に読み取り/書き込み専用のプロパティ Name および読み取り専用のプロパティ Counter があります。In this example, the interface IEmployee has a read-write property, Name, and a read-only property, Counter. クラス EmployeeIEmployee インターフェイスを実装し、これら 2 つのプロパティを使用します。The class Employee implements the IEmployee interface and uses these two properties. プログラムは、新しい従業員の名前と現在の従業員の数を読み込んで、従業員の名前と計算した従業員番号を表示します。The program reads the name of a new employee and the current number of employees and displays the employee name and the computed employee number.

メンバーが宣言されているインターフェイスを参照するプロパティの完全修飾名を使用することができます。You could use the fully qualified name of the property, which references the interface in which the member is declared. 次に例を示します。For example:

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

前の例では、明示的なインターフェイス実装を確認できます。The preceding example demonstrates Explicit Interface Implementation. たとえば、Employee クラスが 2 つのインターフェイス ICitizenIEmployee を実装し、両方のインターフェイスが同じ Name プロパティを持っている場合、明示的なインターフェイス メンバーの実装が必要です。For example, if the class Employee is implementing two interfaces ICitizen and IEmployee and both interfaces have the Name property, the explicit interface member implementation will be necessary. つまり、次のプロパティの宣言があります。That is, the following property declaration:

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

これは、IEmployee インターフェイスで Name プロパティを実装します。次の宣言があります。implements the Name property on the IEmployee interface, while the following declaration:

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

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

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);

210 Hazem Abolrous

サンプル出力Sample output

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

関連項目See also