Интерфейсы и свойства - PullRequest
       11

Интерфейсы и свойства

26 голосов
/ 11 августа 2009

Можно ли объявить свойство в интерфейсе, не объявляя для него методы get и set? Что-то вроде:

IValue = interface
  property value: double;
end;

Я хочу заявить, что у разработчика должно быть свойство с именем value, возвращающее double, но мне действительно все равно, возвращает ли оно приватное поле или результат функции.

Если это возможно, можно ли объявить его для чтения / записи или только для чтения?

Ответы [ 2 ]

33 голосов
/ 11 августа 2009

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

7 голосов
/ 11 августа 2009

При работе со свойствами в интерфейсе воспринимайте это свойство как ярлык для чтения / записи. Только один требуется, чтобы удовлетворить ярлык ... в противном случае это ни на что не указывает.

...