我有一个包含Phone对象的类。
电话是一个虚拟电话,在我的类的构造函数中,我传入了我希望连接的虚拟电话的 IP 地址和端口。
在构造函数中,我运行了一个名为Connect的方法。在Connect方法中,我从电话的 IP 地址/端口组合中实例化一个IPEndPoint对象,然后实例化一个Socket对象,并运行 Socket 对象的Connect方法,传入我的IPEndPoint作为参数。
如果电话服务器没有为特定电话(不是我的工作)正确配置,则连接被拒绝,并抛出SocketException 。我试图捕捉这个异常。
这是一个 Windows 窗体应用程序。在 Form 对象的范围内,但在任何构造函数/方法的范围之外,我将手机作为未实例化的私有字段,如下所示(iPhone 是我手机使用的接口):
private IPhone _phone;
我有一个名为SetupPhone的方法,我在这里实例化我的电话对象,并试图在这里捕获异常:
private void SetupPhone()
{
try
{
_phone = new Phone(AgentDetails.IPAddress, AgentDetails.Port);
}
catch(SocketException ex)
{
Log.LogException("Error mapping phone to port", ex);
ShowBaloonTip("An error occured starting CTI. Please select your name from the list to try again", ToolTipIcon.Error);
ChangeUser();
return;
}
//Subscribe to Phone events here
}
这是电话对象的构造函数:
public Phone(string ipAddress, int port, string password = "FooBar")
{
Connect(ipAddress, port, password);
}
这是连接方法:
public void Connect(string ipAddress, int port, string password)
{
_phone = new IPEndPoint(IPAddress.Parse(ipAddress), port);
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
_socket.Connect(_phone);
//Redacted
}
在未正确配置的电话上,我的 SocketException 如下所示:
我是否认为在对象构造函数中运行的任何方法引发的任何异常都应该被放置在该对象实例化周围的 try/catch 块安全地捕获?还是不是这样?我想捕捉实例化我的对象时可能发生的任何错误,这不可能吗?