2012-01-01 104 views
2

我如何能實現這一點:超級型與靈活的功能

  • 我有3種類型(實際上接口):A,B和C
  • A沒有方法,但B和C的一些方法。
  • 我想在某些情況下,A類可轉換爲類型強制轉換爲C型,並使用它的方法B和採用B方法,在其他情況呢?
+5

什麼你所描述的被認爲是糟糕的設計:它違反了[里氏替換原則(HTTP://en.wikipedia。組織/維基/ Liskov_substitution_principle)。 – 2012-01-01 09:07:25

+0

是的,這是一個糟糕的設計。我應該再想一次。謝謝 – Mehrdad 2012-01-01 09:27:21

回答

1
class Program 
{ 
    interface A { } 
    interface B :A { void b(); } // B inherits from A 
    interface C :A { void c(); } // C also inherits from A 

    static void Main() 
    { 
     // declare vars 

     A a = null; 
     B b = null; 
     C c = null; 

     // a can happily hold references for B. 
     a = b; 

     // To call B's methods you need to cast it to B. 
     ((B)a).b(); 


     // a can happily hold references for C. 
     a = c; 

     // To call C's methods you need to cast it to C. 

     a = c; 
     ((C)a).c(); 
    } 
} 

從您的意見

class Program 
    { 
    private interface A { } 
    private interface B : A { string b();} 
    private interface C : A { string c();} 
    class BClass : B { public string b() { return "B"; } } 
    class CClass : C { public string c() { return "C"; } } 

    private static void Main() 
    { 
     A a = null; 
     B b = new BClass(); 
     C c = new CClass(); 
     a = b; 
     ((B)a).b(); 
     a = c; 
     ((C)a).c(); 
    }  
    } 
+1

私有接口A {} 私有接口B:A {string b();} 私有接口C:A {string c();}class BClass:B {public string b(){return「B」 ;}} class CClass:C {public string c(){return「C」;}} private static void Main() {a} = null; B b = new BClass(); C c = new CClass(); a = b; ((B)a).b(); a = c; ((C)a).c();} – Mehrdad 2012-01-01 09:28:20