2009-05-05 4 views
0

У меня есть два класса, которые имеют некоторые общие методы, такие как funcA(), funcB()Проблема в Interfaces (полиморфизм) C#

и некоторые методы относятся только к его классу ...

, что я был сделан интерфейс TestInterface

public interface TestInterface 
{ 
    void funcA() 
    void funcB() 
} 


public class ClassA : TestInterface 
{ 
    public void funcA() 
    { 
    Console.WriteLine("This is ClassA FuncA()"); 
    } 
    public void funcB() 
    { 
    Console.WriteLine("This is ClassA FuncB()"); 
    } 
    public void myFuncA() 
    { 
     Console.WriteLine("This is My Own Function A"); 
    } 

} 

public class ClassB : TestInterface 
    { 
     public void funcA() 
     { 
     Console.WriteLine("This is ClassB FuncA()"); 
     } 
     public void funcB() 
     { 
     Console.WriteLine("This is ClassB FuncB()"); 
     } 
     public void myFuncB() 
     { 
      Console.WriteLine("This is My Own Function B"); 
     } 

    } 



public static void main() 
{ 
TestInterface test = new ClassA(); 
test.funcA(); 
} 

как вы видите выше двух классов. У меня есть две функции: myFuncA() и myFuncB() не являются частью интерфейса. они принадлежат только своему классу.

Как я могу назвать их из основного метода. где я создаю объект TestInterface и инициализирую его каким-то дочерним классом. ???


Фактически у меня есть отдельные классы в DAL.

У них есть общие методы. и некоторые методы, связанные с их собственным классом.

Я хочу реализовать заводской шаблон на этом.

что мне теперь делать?

ответ

-1
is it good to add methods of ClassA and ClassB into interface and provide null implementation in other class? 
like 

public interface TestInterface 
{ 
void funcA(); 
void funcB(); 
void myFuncA(); 
void myFuncB(); 
} 


public class ClassA:TestInterface 
{ 
public void funcA() 
{ 
// some code here 
} 

public void funcB() 
{ 
// some code here 
} 
public void myFuncA() 
{ 
// my own code here 
} 
public void funcB() 
{ 
// null implementation 
} 
} 

и наоборот этого в ClassB

+0

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

2

Если вы спрашиваете, можно ли сделать что-то вроде:

public static void Main(string[] a) 
{ 
TestInterface test = new ClassA(); 
test.myFuncA(); 
} 

ответ нет. Вам нужно будет сначала перенести его в ClassA. Тот факт, что вы думаете, что вам нужно это сделать, указывает, что, возможно, что-то не так с вашим дизайном.

0

Создайте новый интерфейс для ClassA и ClassB, и вам просто нужно передать класс в правильный интерфейс, чтобы увидеть новые функции.

public class ClassA : TestInterface, TestInterfaceA { 
} 

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

0

Вы можете привести объект TestInterface, но побеждает цель полиморфизма ...

public static void main() 
{ 
TestInterface test = new ClassA(); 
test.funcA(); 
((ClassA) test).myFuncA(); 
} 
0

Try отливку. Я предполагаю, что от вопроса вы имели в виду что-то вроде этого:

public void simpleMethod(TestInterface variableName) { 
    if (variableName is ClassA) { 
     ((ClassA)variableName).myFuncA(); 
    } 
} 
0

Мохсен Я действительно путают с вопросом

если вы просто хотите звоните MyFuncA() или MyFuncB() просто необходимо создать экземпляр своего собственного Calss как

ClassA a = new ClassA(); 
a.FuncA(); //interface member 
a.FuncB(); // interface member 
a.MyFuncA(); //class A Member 

Я не могу undrestand, почему вы пытаетесь создать экземпляр вашего интерфейса, а затем вызывать методы подкласса !!!! Я прав? или Imisunderstood ваша проблема?

1
TestInterface test = new ClassA(); 
test.myFuncA(); 
(test as ClassB).myFuncB(); 

Надеюсь, это было то, что вы искали.

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