假设我有一个类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)
这种方法是否可行/推荐?
是的,这可以使用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)