我对这个c#有一点困惑,code.This代码是来自http://trotinet.sourceforge.net/的,有人能让我明白..
int port = 12345;
bool bUseIPv6 = false;
var Server = new TcpServer(port, bUseIPv6);
Server.Start(**TransparentProxy.CreateProxy**);透明代理类:
public class TransparentProxy : ProxyLogic
{
public TransparentProxy(HttpSocket clientSocket)
: base(clientSocket)
{
}
static new public TransparentProxy CreateProxy(HttpSocket clientSocket)
{
return new TransparentProxy(clientSocket);
}
protected override void OnReceiveRequest()
{
Console.WriteLine("-> " + RequestLine + " from HTTP referer " +
RequestHeaders.Referer);
}
protected override void OnReceiveResponse()
{
Console.WriteLine("<- " + ResponseStatusLine +
" with HTTP Content-Length: " +
(ResponseHeaders.ContentLength ?? 0));
}
}由于CreateProxy是带参数的静态方法,但是该方法是从主程序中调用的,没有参数。这个例子应用程序很好,所以我有点困惑。所以,有人能让我明白吗?)
谢谢!
发布于 2014-11-13 15:21:59
您的TcpServer.Start方法接受委托作为参数。
这意味着它只需要执行该方法,但在稍后的Start方法中执行它。
这是Start方法的签名(您可以在github上找到它):
public void Start(OnNewClient onConnection)正如您所看到的,OnNewClient是一个委托:
public delegate AbstractProxyLogic OnNewClient(HttpSocket ss)因此,这里的参数是一个具有与委托声明的签名相同的方法。
您可以在这里看到TcpServer类的源代码:https://github.com/krys-g/TrotiNet/blob/master/Lib/TcpServer.cs
发布于 2014-11-13 15:23:44
TrotiNet.TcpServer类定义了以下成员:
public delegate AbstractProxyLogic OnNewClient(HttpSocket ss);
public void Start(OnNewClient onConnection)
{
// ...
}因此,TcpServer.Start()方法接受一个委托参数。
方法TransparentProxy.CreateProxy()匹配签名(TransparentProxy继承自AbstractProxyLogic),因此方法不被调用,而是作为委托传递。
https://stackoverflow.com/questions/26912226
复制相似问题