我有一個TcpClient的字段的抽象基類:TcpClient的字段
public abstract class ControllerBase
{
internal protected TcpClient tcpClient;
它有一個方法設置一個連接:
private void setupConnection(IPAddress EthernetAddress, ushort TcpPort)
{
if (this.tcpClient == null || !this.tcpClient.Connected)
{
this.tcpClient = new TcpClient();
try
{
this.tcpClient.Connect(EthernetAddress, TcpPort);
}
catch(Exception ex)
{
throw new TimeoutException("The device did not respond.\n" + ex.Message);
}
}
}
而且比的方法來請求數據:
internal protected virtual byte[] requestData(IPAddress EthernetAddress, ushort TcpPort, byte[] data, bool IgnoreResponse)
{
setupConnection(EthernetAddress, TcpPort);
//The rest of the code uses this.tcpClient
還有一些其他的,如requestRawData等...他們是必需的f或非常特定的硬件通信協議,但這不是這個問題的一部分。
我再有,從這個類派生類和它們覆蓋基類的方法:
public class Controller : ControllerBase
{
internal virtual byte[] requestData(byte[] data, bool IgnoreResponse)
{
return base.requestData(this.eth0.EthernetAddress, this.eth0.TcpPort, data, IgnoreResponse);
}
代碼工作沒有任何異常,但每次的setupConnection方法被調用, 的TcpClient的實例(TcpClient的)似乎被處置,所以創建一個新的連接方法,並再次調用連接方法,真的減慢了通信過程。
注意:子類的公共方法調用requestData方法, 從開發人員使用此庫中抽取許多詳細信息。
如SetDevicePower(字節功率電平),QueryDeviceName()等...
代碼如此:
Controller controller = new Controller("172.17.0.3",34000);
string name = controller.QueryDeviceName();
controller.SetDevicePower(200);
使連接方法被調用兩次......爲什麼它被在呼叫之間放置?