针对已知方法的程序,而不是类型

Sae*_*ani 0 .net c#

假设我有一个类A将被编译成一个dll稍后使用的类.但我知道后来,B我不知道它的类型的一些类方法必须在A类中调用.唯一的线索是方法的名称.

让我们说这是课A:

public class A
{
    A(Object instanceOfClassB)
    {
          //stuff...
    }

    public void SendProcessedString()
    {
         //some strings has been processd, I know that class B is going
         //to have a public method like ReceiveData(string data){/*---*/}
         instanceOfClassB.ReceiveData(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

让我们说这是类B,碰巧是WinForm:

public B : Form
{
     public void ReceiveData(string data)
     {
          textBox.Append(data + Environment.NewLine);
     }
}
Run Code Online (Sandbox Code Playgroud)

这种方法是否可行/推荐?

BJ *_*ers 5

是的,这可以使用dynamic关键字(在C#4.0或更高版本中).有关详细信息,请查看MSDN文档.

但是,这会导致令人难以置信的松散编程,并且可能导致难以调试的运行时问题.你最好创建一个B类将实现的接口.

public class A
{
    A(IDataReceiver instanceOfClassB)
    {
          //stuff...
    }

    public void SendProcessedString()
    {
         //some strings has been processd, I know that class B is going
         //to have a public method like ReceiveData(string data){/*---*/}
         instanceOfClassB.ReceiveData(data);
    }
}

public B : Form, IDataReceiver
{
     public void ReceiveData(string data)
     {
          textBox.Append(data + Environment.NewLine);
     }
}

public interface IDataReceiver
{
    void ReceiveData(string data);
}
Run Code Online (Sandbox Code Playgroud)