如何将任何可以显示文本的对象传递给C#方法

时间:2015-01-31 07:22:08

标签: c# user-interface polymorphism

我试图编写一个类的方法,该类应该将对象(例如文本框或标签)作为参数,并且每当需要向用户显示消息时,它使用该对象来显示消息

由于该类将在其他程序中使用,它应该是一个可移植的,它应该实现任何基于文本的对象(如标签或文本框等)的功能。

考虑以下方法:

public void TcpEndPoint(string IP,/* a text-based object */)
{ 

    // There's a need to show a message 
    // to the user by the text-based object

}

有没有办法实现这个,或者这种编程不适合便携式类?

2 个答案:

答案 0 :(得分:3)

我会采取不同的方法。我不会传入文本接收对象,而是使用委托传递文本:

public void TcpEndPoint(string IP, Action<string> setText)
{
    setText(message);
}

然后可以使用lambda表达式调用它:

TcpEndPoint(someIp, t => yourTextBox.Text = t);

答案 1 :(得分:1)

你称之为text-based object的是我假设Windows.Forms.Control。此类是Windows窗体中所有可视对象的基类。因此,您可以使用该类和get Text属性。

public void TcpEndPoint(string IP, Control _object)
{ 
    ...
    MessageBox.Show(_object.Text);/// or in any other way you like.
    ...
}

<强>更新

如果您想set该对象的Text属性并在上显示消息,请使用它:

public void TcpEndPoint(string IP, string message, Control _object)
{ 
    ...
    _object.Text = message; /// or in any other way you like.
    ...
}