Jan*_*ter 4 c# ref contravariance
这有效:
EndPoint endPoint = new IPEndPoint(_address, _port);
_socket.ReceiveFrom(buffer, 0, 1024, SocketFlags.None, ref endPoint);
Run Code Online (Sandbox Code Playgroud)
但这不是:
IPEndPoint endPoint = new IPEndPoint(_address, _port);
_socket.ReceiveFrom(buffer, 0, 1024, SocketFlags.None, ref endPoint);
Run Code Online (Sandbox Code Playgroud)
(注意endPoint的类型)
这似乎很奇怪.为什么ref关键字会破坏参数的逆转?
Tho*_*que 17
因为在方法签名中,endPoint
参数声明为EndPoint
,而不是IPEndPoint
; 无法保证该方法不会设置endPoint
为另一种EndPoint
不可分配给IPEndPoint
变量的方法.
例如,假设您有一个FooEndPoint
继承自的类EndPoint
,以及一个Foo
带ref EndPoint
参数的方法:
public class FooEndPoint : EndPoint
{
...
}
public void Foo(ref EndPoint endPoint)
{
...
endPoint = new FooEndPoint();
...
}
Run Code Online (Sandbox Code Playgroud)
如果你能够将a传递IPEndPoint
给该方法,那么a 参数的FooEndPoint
分配endPoint
将在运行时失败,因为a FooEndPoint
不是IPEndPoint
归档时间: |
|
查看次数: |
412 次 |
最近记录: |