ほとんど個人的なメモです。
.NET FrameworkのSystem.Net.Sockets.TcpClient.Client プロパティは、1.1と2.0の間で使い方に関する決定的な非互換性を持ちます。(上位互換性はある)
宣言の違い(C#構文) §
1.1の場合
protected Socket Client {get; set;}
2.0の場合
public Socket Client { get; set; }
つまり、protectedがpublicになって制限が解除されたわけです。
使い方の相違 §
1.1の場合、Clientプロパティに触れるということは、常にSystem.Net.Sockets.TcpClientクラスの継承を必須要求していたことになります。
しかし、2.0では継承は必須ではありません。
ソースコードは大幅に簡潔になります。
感想 §
これはずっと昔、えらい苦労させられた問題に関係する話題です。
なので、印象が強く、すぐに思い出せました。
「ったくもう、この機能をprotectedにするとは何を考えてるのだろう……」と思っていたら、制限解除されたようですね。
変更点のリストを詳しく見ている訳ではないので(見てもどうせ気付かないだろうし)、まだまだたまに発見があります。
余談ですが、これでお役御免となった昔のコードです。
public class MyTcpClient : System.Net.Sockets.TcpClient
{
public MyTcpClient( System.Net.Sockets.Socket socket )
{
base.Client = socket;
}
public EndPoint RemoteEndPoint
{
get
{
System.Net.Sockets.Socket socket = Client;
return socket.RemoteEndPoint;
}
}
}