2015-10-20 5 views
2

Я создаю объект из класса интерфейса с ссылкой на класс реализации, но моя проблема заключается в том, что метод вызова производного класса с использованием объекта я не могу.Интерфейс вызова Реализованные методы класса

Я не могу вызывать реализованный метод класса после создания объекта из интерфейса?

class Demo : Iabc 
{ 
    public static void Main() 
    { 
    System.Console.WriteLine("Hello Interfaces"); 
    Iabc refabc = new Demo(); 
    refabc.xyz(); 
    Iabc refabc = new Sample(); 
    refabc.xyz(); 
    refabc.Calculate(); // not allowed to call Sample's own methods  
    } 

    public void xyz() 
    { 
     System.Console.WriteLine("In Demo :: xyz"); 
    } 
} 

interface Iabc 
{ 
     void xyz(); 
} 

class Sample : Iabc 
{ 
    public void xyz() 
    { 
     System.Console.WriteLine("In Sample :: xyz"); 
    } 
    public void Calculate(){ 
     System.Console.WriteLine("In Sample :: Calculation done"); 

    } 
} 
+0

вам нужно отправить 'refabc' в' Sample', поскольку метод не содержится в интерфейсе. – Ric

ответ

0

Вы должны бросить refabc в Sample:

// refabc is treated as "Iabc" interface 
    Iabc refabc = new Sample(); 
    // so all you can call directly are "Iabc" methods 
    refabc.xyz(); 

    // If you want to call a methods that's beyond "Iabc" you have to cast: 
    (refabc as Sample).Calculate(); // not allowed to call Sample's own methods 

Альтернатива объявить refabc, как Sample например:

// refabc is treated as "Sample" class 
    Sample refabc = new Sample(); 
    // so you can call directly "Iabc" methods ("Sample" implements "Iabc") 
    refabc.xyz(); 

    // ...and "Sample" methods as well 
    refabc.Calculate(); 

примечание стороны: кажется, что реализация Iabc в категории Demo есть redundant. Я бы предпочел бы так:

// Main method is the only purpose of Demo class 
    static class Demo { // <- static: you don't want to create Demo instances 
    public static void Main() { 
     // Your code here 
     ... 
    } 
    } 
+0

Я использую первый подход для Injection Dependency, но теперь похоже, что у моего класса реализации не могут быть свои собственные методы, поскольку на уровне Controller в MVC я не хочу раскрывать имя класса реализации. – Coder

Смежные вопросы