Интерфейсные свойства и индексаторы
Интерфейсные свойства
Аналогично методам, свойства указываются в интерфейсе вообще без тела. Ниже приведена общая форма объявления интерфейсного свойства:
// Интерфейсное свойство тип имя{ get; set; }
Очевидно, что в определении интерфейсных свойств, доступных только для чтения или только для записи, должен присутствовать единственный аксессор: get или set соответственно.
Несмотря на то что объявление свойства в интерфейсе очень похоже на объявление автоматически реализуемого свойства в классе, между ними все же имеется отличие. При объявлении в интерфейсе свойство не становится автоматически реализуемым. В этом случае указывается только имя и тип свойства, а его реализация предоставляется каждому реализующему классу. Кроме того, при объявлении свойства в интерфейсе не разрешается указывать модификаторы доступа для аксессоров. Например, аксессор set не может быть указан в интерфейсе как private.
Давайте рассмотрим пример:
using System; namespace ConsoleApplication1 { interface IUserInfo { string Name { get; set; } } class UI : IUserInfo { string myName; public string Name { set { myName = value; } get { return myName; } } } class Program { static void Main() { UI user1 = new UI(); user1.Name = "Alexandr"; Console.ReadLine(); } } }
В данном примере в классе UI реализуется свойство интерфейса IUserInfo.
Интерфейсные индексаторы
В интерфейсе можно также указывать индексаторы. Ниже приведена общая форма объявления интерфейсного индексатора:
// Интерфейсный индексатор тип_элемента this[int индекс]{ get; set; }
Как и прежде, в объявлении интерфейсных индексаторов, доступных только для чтения или только для записи, должен присутствовать единственный аксессор: get или set соответственно. Давайте добавим в предыдущий пример реализацию индексатора:
using System; namespace ConsoleApplication1 { interface IUserInfo { string Name { get; set; } string this[int index] { get; set; } } class UI : IUserInfo { string myName; public string Name { set { myName = value; } get { return myName; } } public string this[int index] { set { myName = value; } get { return myName; } } } class Program { static void Main() { UI user1 = new UI(); user1.Name = "Alexandr"; user1[5] = "Dmitryi"; user1[10] = "Alexey"; Console.ReadLine(); } } }
Комментарии