Интерфейсные свойства и индексаторы
90C# --- Руководство по C# --- Интерфейсные свойства и индексаторы
Интерфейсные свойства
Аналогично методам, свойства указываются в интерфейсе вообще без тела. Ниже приведена общая форма объявления интерфейсного свойства:
// Интерфейсное свойство тип имя{ 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();
}
}
}