Супер тип с гибкой функциональностью - PullRequest
2 голосов
/ 01 января 2012

Как я могу это реализовать:

  • У меня есть 3 типа (на самом деле интерфейс): A, B и C
  • A не имеет методов, но B и C имеют несколько методов.
  • Я хочу, чтобы тип A в некоторых ситуациях можно было приводить к типу B и использовать методы B, а в других ситуациях приводить к типу C и использовать его методы?

1 Ответ

1 голос
/ 01 января 2012
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();
    }    
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...