Почему интерфейс позволяет объявлять состояния в интерфейсе? - PullRequest
4 голосов
/ 27 марта 2009

Согласно ответу на Почему нам не разрешено указывать конструктор в интерфейсе? ,

Потому что интерфейс описывает поведение. Конструкторы - это не поведение. Как строится объект - это деталь реализации.

Если interface описывает поведение , почему interface позволяет объявлять состояние ?

public interface IStateBag
{
    object State { get; }
}

Ответы [ 4 ]

11 голосов
/ 27 марта 2009

Ну, это не совсем так. Если бы интерфейсы позволили вам объявить поля , то это было бы состояние. Поскольку свойство является просто синтаксическим сахаром для методов get и set, оно разрешено.

Вот пример:

interface IFoo
{
    Object Foo { get; set; }
}

Предыдущий интерфейс компилируется в следующий IL:

.class private interface abstract auto ansi IFoo
{
    .property instance object Foo
    {
        .get instance object IFoo::get_Foo()
        .set instance void IFoo::set_Foo(object)
    }
}

Как видите, даже интерфейс видит свойство как методы.

9 голосов
/ 27 марта 2009

Свойство не является реализацией. Например, вы не можете определить поля . Свойства и события - это на самом деле просто специальные шаблоны методов; со свойством это "get_" и "set_", а с событием "add_" и "remove _".

Так что это всего лишь метод.

2 голосов
/ 27 марта 2009

Свойство также является описанием поведения: класс, реализующий интерфейс, по-прежнему обладает полной свободой при выборе способа реализации свойств.

Если не разрешить объявление свойств в интерфейсе, разработчики будут вынуждены создавать геттеры и сеттеры вручную:

object GetState();
void SetState( object o );
1 голос
/ 27 марта 2009

Если интерфейс описывает поведение, почему интерфейс допускает объявление состояния?

Состояние - это тип поведения. Нет ничего плохого в том, что интерфейс указывает состояние в качестве одного из вариантов поведения.

Я полагаю, что ваш вопрос основан на ложном аргументе. Я думаю, что вы берете эту цитату слишком литерально. Я думаю, что более ясный способ сказать, что это ...

Интерфейсы описывают поведение определенного объекта. Конструкторы - это метод создания объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...