interface (Справочник по C#)interface (C# Reference)

Интерфейс содержит только сигнатуры методов, свойств, событий или индексаторов.An interface contains only the signatures of methods, properties, events or indexers. Класс или структура, реализующие интерфейс, должны реализовать члены интерфейса, заданные в определении интерфейса.A class or struct that implements the interface must implement the members of the interface that are specified in the interface definition. В следующем примере класс ImplementationClass должен реализовать метод с именем SampleMethod, не имеющий параметров и возвращающий значение void.In the following example, class ImplementationClass must implement a method named SampleMethod that has no parameters and returns void.

Дополнительные сведения и примеры см. в разделе Интерфейсы.For more information and examples, see Interfaces.

ПримерExample

interface ISampleInterface
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    // Explicit interface member implementation: 
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }

    static void Main()
    {
        // Declare an interface instance.
        ISampleInterface obj = new ImplementationClass();

        // Call the member.
        obj.SampleMethod();
    }
}

Интерфейс может быть членом пространства имен или класса и содержать сигнатуры следующих членов:An interface can be a member of a namespace or a class and can contain signatures of the following members:

Интерфейс может наследовать от одного или нескольких базовых интерфейсов.An interface can inherit from one or more base interfaces.

Если список базовых типов содержит базовый класс и интерфейсы, базовый класс должен стоять первым в списке.When a base type list contains a base class and interfaces, the base class must come first in the list.

Класс, реализующий интерфейс, может явно реализовывать члены этого интерфейса.A class that implements an interface can explicitly implement members of that interface. При явной реализации члена к нему можно получить доступ только через экземпляр интерфейса, но не через экземпляр класса.An explicitly implemented member cannot be accessed through a class instance, but only through an instance of the interface.

Дополнительные сведения и примеры кода с явной реализацией интерфейса см. в разделе Явная реализация интерфейса.For more details and code examples on explicit interface implementation, see Explicit Interface Implementation.

ПримерExample

В следующем примере показана реализация интерфейса.The following example demonstrates interface implementation. В этом примере интерфейс содержит объявление свойства, а класс содержит реализацию.In this example, the interface contains the property declaration and the class contains the implementation. Любой экземпляр класса, который реализует IPoint, имеет целочисленные свойства x и y.Any instance of a class that implements IPoint has integer properties x and y.

interface IPoint
{
   // Property signatures:
   int x
   {
      get;
      set;
   }

   int y
   {
      get;
      set;
   }
}

class Point : IPoint
{
   // Fields:
   private int _x;
   private int _y;

   // Constructor:
   public Point(int x, int y)
   {
      _x = x;
      _y = y;
   }

   // Property implementation:
   public int x
   {
      get
      {
         return _x;
      }

      set
      {
         _x = value;
      }
   }

   public int y
   {
      get
      {
         return _y;
      }
      set
      {
         _y = value;
      }
   }
}

class MainClass
{
   static void PrintPoint(IPoint p)
   {
      Console.WriteLine("x={0}, y={1}", p.x, p.y);
   }

   static void Main()
   {
      IPoint p = new Point(2, 3);
      Console.Write("My Point: ");
      PrintPoint(p);
   }
}
// Output: My Point: x=2, y=3

Спецификация языка C#C# language specification

Дополнительные сведения см. в спецификации языка C#.For more information, see the C# Language Specification. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.The language specification is the definitive source for C# syntax and usage.

См. такжеSee also