Как создать интерфейс между двумя проектами, на которые нет ссылок - PullRequest
1 голос
/ 15 декабря 2008

Как два класса в разных проектах могут общаться друг с другом?

Если ClassA ссылается на ClassB, я могу получить доступ к методам ClassB в ClassA ... Как можно использовать интерфейсы для доступа к методам ClassA в ClassB?

Действительно ли нужно даже связывать классы, если я использую интерфейсы?

Может кто-нибудь привести пример?

Кодирование в C # 2.0.


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

Мне уже говорили, что это то, что я должен использовать, однако мне трудно понять, как реализовать интерфейс, если на проекты нет ссылок.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2008

Полагаю, вы имеете в виду сборки, а не классы.

У вас есть два варианта, либо вы используете пространство имен System.Reflection (грязный путь), и тогда вам даже не нужно иметь никаких интерфейсов, просто вызывайте методы через отражение.

System.Reflection.Assembly.LoadFile("MyProject.dll").GetType("MyProject.TestClass").GetMethod("TestMethod").Invoke();

Или понятным способом, создайте AssemblyZ только с интерфейсами и разрешите классам в обеих сборках (A и B) реализовать эти интерфейсы.

0 голосов
/ 15 декабря 2008
  1. В Link Assembly просто определите интерфейсы:

    Public Interface IA { void DoSomething(); }
    
    Public Interface IB { void DoSomething(); }
    
  2. Сборка ссылочного звена из другой сборки, которая имеет класс A:

    class A : LinkAssembly.IA {
    
    Public sub DoSomethingOnB(IB b ) { b.DoSomething(); }
    
    Public sub DoSomething(){// }
    
    }
    
  3. То же самое для класса B, как A:

    class B : LinkAssembly.IB {
    
    Public sub DoSomethingOnA(IA a ) { a.DoSomething(); }
    
    Public sub DoSomething(){// }
    
    }
    
0 голосов
/ 15 декабря 2008

Вы можете получить доступ к функции класса A из B через интерфейс, используя полиморфизм интерфейса.

class B
{

   Public sub DoSomethingOnA(IA a )
   {
        a.DoSomething();
   }

}

Interface IA
{
    void DoSomething();
}

Class A : IA
{
    void DoSomething()
   {
       //
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...