Подтвердить что ты не робот

Может ли интерфейс содержать переменную?

Возможный дубликат:
Почему интерфейсы С# не могут содержать поля?

Привет всем,

Джон Скит ответил на вопрос, что использование свойства поддерживается переменной.

Но свойства в интерфейсах разрешены в С#. Означает ли это, что интерфейсы на С# могут содержать переменную и как будет обрабатываться переменная, поддерживаемая этим свойством?

Спасибо заранее.

4b9b3361

Ответ 1

Нет. Интерфейс не может содержать поле.

Интерфейс может объявить свойство, но он не обеспечивает его реализации, поэтому нет поля поддержки. Это только тогда, когда класс реализует интерфейс, который необходим для поля поддержки (или автоматического свойства).

Ответ 2

Интерфейс может быть членом пространства имен или класса и может содержать подписи следующих членов:

Methods

Properties

Indexers

Events

Свойства могут быть объявлены на интерфейсах. Декларация имеет следующий вид: Аксессуар свойства интерфейса не имеет тела.

Таким образом, цель аксессоров заключается в том, чтобы указать, является ли свойство для чтения-записи, только для чтения или для записи.

Пример:

// Interface Properties    
interface IEmployee
{
   string Name
   {
      get;
      set;
   }

   int Counter
   {
      get;
   }
}

Реализация:

public class Employee: IEmployee 
{
   public static int numberOfEmployees;

   private int counter;

   private string name;

   // Read-write instance property:
   public string Name
   {
      get
      {
         return name;
      }
      set
      {
         name = value;
      }
   }

   // Read-only instance property:
   public int Counter
   {    
      get    
      {    
         return counter;
      }    
   }

   // Constructor:
   public Employee()
   {
      counter = ++counter + numberOfEmployees;
   }
}  

MainClass:

public class MainClass
{
   public static void Main()
   {    
      Console.Write("Enter number of employees: ");

      string s = Console.ReadLine();

      Employee.numberOfEmployees = int.Parse(s);

      Employee e1 = new Employee();

      Console.Write("Enter the name of the new employee: ");

      e1.Name = Console.ReadLine();  

      Console.WriteLine("The employee information:");

      Console.WriteLine("Employee number: {0}", e1.Counter);

      Console.WriteLine("Employee name: {0}", e1.Name);    
   }    
}

Ответ 3

Свойства могут быть объявлены на интерфейсе (не определены). Но у аксессора свойства интерфейса нет тела. Таким образом, цель аксессоров - указывает, является ли свойство read-write, read-only или только для записи.

Если вы проверите документ MSDN, вы увидите, что вы не определяете свойство в вместо этого реализация реализуется наследующим классом.

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
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

    private int counter;
    public int Counter  // read-only instance property
    {
        get
        {
            return counter;
        }
    }

    public Employee()  // constructor
    {
        counter = ++counter + numberOfEmployees;
    }
}

Таким образом, в интерфейсе IEmployee Синтаксис свойств выглядит как автоматически реализованные свойства, но они просто указывают, является ли свойство read-write, read-only или write-only не более того. Его задача - реализовать класс для реализации и определения свойств.

Ответ 4

Нет, интерфейс - это только "контракт". Свойство реализуется до класса реализации; он может или не может использовать переменную для ее поддержки.

Ответ 5

Нет, это не значит. Интерфейс также не содержит свойства.

Помните, что интерфейс должен быть реализован классом, чтобы вы могли его использовать. Интерфейс определяет только контракт, что означает, что любой класс, реализующий этот интерфейс, будет иметь все члены, определенные интерфейсом. Интерфейс фактически не имеет этих членов; это больше похоже на шаблон. Экземпляр класса, реализующего интерфейс, - это тот, который содержит это свойство, и, следовательно, поле частной поддержки, используемое для этого свойства.

Интерфейсы могут определять только сигнатуры для следующих членов:

  • Методы
  • Свойства
  • Индексаторы
  • События