2009-05-05 46 views
0

我有有像 FuncA的(),funcB()問題在接口(多態性)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 
} 
} 

和老虎鉗反之亦然這個我真的與你的問題

困惑,如果你只是想調用MyFuncA()或MyFuncB(),你應該創建一個自己的實例,如

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

我不能undrestand爲什麼您要創建接口的實例,然後調用子類方法!!!! 我對不對?或者不明白你的問題?

+0

這就是空對象模式。但是你應該認真考慮這是否是必要的。 – 2009-05-05 05:05:19

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

嘗試鑄造。我從你的意思是這樣的問題的假設:在ClassB的

0

穆赫辛

public void simpleMethod(TestInterface variableName) { 
    if (variableName is ClassA) { 
     ((ClassA)variableName).myFuncA(); 
    } 
} 
1
TestInterface test = new ClassA(); 
test.myFuncA(); 
(test as ClassB).myFuncB(); 

希望這是你要找的。