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);
}
Connectメソッドは次のとおりです。
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ブロックによって安全にキャッチされるべきだと考えるのは正しくありませんか?それともそうではありませんか?オブジェクトをインスタンス化するときに発生する可能性のあるエラーをキャッチしたいのですが、これは不可能ですか?