2015-06-16 2 views
0

C# поддерживает встроенный механизм дифференцирования методов с одинаковыми именами. Вот простой пример, приведенный ниже, показывает, как это работает:В чем преимущества явной реализации интерфейса в C#?

interface IVehicle{ 
    //identify vehicle by model, make, year 
    void IdentifySelf();  
} 

interface IRobot{ 
    //identify robot by name 
    void IdentifySelf(); 
} 

class TransformingRobot : IRobot, IVehicle{ 
    void IRobot.IdentifySelf(){ 
     Console.WriteLine("Robot"); 
    } 

    void IVehicle.IdentifySelf(){ 
     Console.WriteLine("Vehicle"); 
    } 
} 

Каковы варианты использования или преимущества этого различия? Действительно ли мне нужно различать абстрактные методы в реализации классов?

ответ

1

В вашем случае нет никакой реальной выгоды, ведь наличие двух таких методов просто сбивает с толку пользователя. Однако они являются ключевыми, если у вас есть:

interface IVehicle 
{ 
    CarDetails IdentifySelf();  
} 

interface IRobot 
{ 
    string IdentifySelf(); 
} 

Теперь у нас есть два метода с тем же именем, но с разными типами возврата. Поэтому они не могут быть перегружены (типы возврата игнорируются для перегрузки), но они могут быть явно указаны:

class TransformingRobot : IRobot, IVehicle 
{ 
    string IRobot.IdentifySelf() 
    { 
     return "Robot"; 
    } 

    CarDetails IVehicle.IdentifySelf() 
    { 
     return new CarDetails("Vehicle"); 
    } 
} 
Смежные вопросы