Может кто-нибудь объяснить точное использование интерфейсов в C #? - PullRequest
2 голосов
/ 11 мая 2010

Может кто-нибудь объяснить точное использование интерфейсов в C #?

Ответы [ 6 ]

2 голосов
/ 11 мая 2010

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

interface IVehicle
{
   Engine vehicleEngine { get; set; }

   bool StartEngine();
}

Теперь фабрика производит множество других транспортных средств, например, грузовик и обычный автомобиль:

public Car : IVehicle
{
   // MUST implement vehicleEngine and StartEngine:

   public Engine vehicleEngine { get; set; }

   public bool StartEngine()
   {
       // Cars needs to do xyz to start
   }

   public int MaxNumberOfPassenger { get; set; } // Specific to Car
}

и затем:

public Truck : IVehicle
{
   // MUST implement vehicleEngine and StartEngine:

   public Engine vehicleEngine { get; set; }

   public bool StartEngine()
   {
       // Trucks needs to do abc to start
   }

   public int MaximumLoad { get; set; } // Specific to Truck
}

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

2 голосов
/ 11 мая 2010

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

Чтобы сэкономить время на повторение того, что было сказано ранее, , попробуйте этот поиск и начните просматривать результаты.

2 голосов
/ 11 мая 2010
0 голосов
/ 11 мая 2010

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

Например, интерфейс может определить функцию с именем Foo, которая принимает целое число и возвращает логическое значение:

public interface ICanFoo
{
    bool Foo(int number);
}

Любой класс, который реализует этот интерфейс, должен также реализовать этот метод:

public class Fooable : ICanFoo
{
    public bool Foo(int number)
    {
        // do something
    }
}

Реализация в методе зависит от конкретных классов, которые реализуют интерфейс.

Используя интерфейсы, вы больше не заботитесь о реализации во время компиляции, а скорее о спецификации. Вы можете назвать это так:

ICanFoo myFooable = ...
bool success = fooable.Foo(4);

Фактическим типом fooable может быть любой класс, реализующий ICanFoo, поскольку вы знаете , что ICanFoo всегда будет определять реализацию метода для метода Foo.

0 голосов
/ 11 мая 2010

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

0 голосов
/ 11 мая 2010

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

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