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

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

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

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

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

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


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

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

15.12.2008 08:00:09
3 ОТВЕТА

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

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

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

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

2
15.12.2008 08:41:49
Thx Lubos ... у вас есть пример вашего второго варианта (чистый способ)?
jasper 15.12.2008 08:49:30

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

class B
{

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

}

Interface IA
{
    void DoSomething();
}

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

}
0
1.11.2011 20:31:04
этот код в порядке ... единственное, что не сработает, это передача (IA a) методу DoSomethingOnA. Все остальное имеет смысл для меня, кроме переданного в интерфейсе.
jasper 16.12.2008 06:23:19
в этом примере сборка classB ссылается на сборку classA? Я после того, как решение , где узлы не ссылаются , но CLASSA и выполнить метод в ClassB
jasper 16.12.2008 06:28:15
  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
1.11.2011 20:33:15
как вы называете DoSomethingOnB например ... я вижу, что вы должны передать ему интерфейс? Как это сделать?
jasper 15.12.2008 12:51:00
Вызывающая сторона из других сборочных вызовов, которые функционируют следующим образом: A myA = new A (); B myB = новый B (); myA.DoSomethingOnB (Myb); Как видите, эти классы абсолютно независимы друг от друга, и класс A может вызывать функцию класса B без каких-либо ссылок на нее.
mtt 15.12.2008 15:10:36
Если классы не ссылаются друг на друга, я не понимаю, как можно написать «B myB = new B ()» в классе A. Без ссылки на класс B указанная выше строка недопустима.
jasper 15.12.2008 21:41:48
Это не означает, что B myB = new B () находится в классе A, я имею в виду в различных сборках, которые используют те классы, где функция класса B фактически вызывается в это время. Не может создать экземпляр класса B на A без его ссылки, но может знать его функцию через интерфейс в классе А. Теперь я указываю на это.
mtt 16.12.2008 03:05:11
любая сборка имеет код A myA = new A (); B myB = новый B (); myA.DoSomethingOnB (Myb); Похоже, нужна ссылка на оба проекта, содержащие классы. Извините, но я запутался с этой реализацией. Можете ли вы ответить более подробно ... т.е. как это работает, чтобы напечатать что-то на консоли.
jasper 16.12.2008 06:20:48