Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调用以下构造函数Func<;T>;与SimpleSocket(Func<;System.IO.Sockets.Socket>;socketFunc)一样_C#_Sockets_Func - Fatal编程技术网

C# 如何调用以下构造函数Func<;T>;与SimpleSocket(Func<;System.IO.Sockets.Socket>;socketFunc)一样

C# 如何调用以下构造函数Func<;T>;与SimpleSocket(Func<;System.IO.Sockets.Socket>;socketFunc)一样,c#,sockets,func,C#,Sockets,Func,我不熟悉这个API,但我正在尝试创建一个新的构造函数,它需要一个Func参数,如下面的构造函数所示 public SimplSocket(System.Func<System.Net.Sockets.Socket> socketFunc, int messageBufferSize, int maximumConnections, bool useNagleAlgo

我不熟悉这个API,但我正在尝试创建一个新的构造函数,它需要一个Func参数,如下面的构造函数所示

public SimplSocket(System.Func<System.Net.Sockets.Socket> socketFunc, 
                   int messageBufferSize, 
                   int maximumConnections, 
                   bool useNagleAlgorithm)  
public simplesocket(System.Func socketFunc,
int messageBufferSize,
int最大连接数,
布尔使用算法)
如何处理socketFunc?

系统。Func
是一个所谓的委托。它们用于保存函数。在这种特殊情况下,委托只接受返回
System.Net.Sockets.Socket
类型且没有参数的函数。例如:

您在某处定义了一个函数:

public System.Net.Sockets.Socket someFunction()
{
  //whatever it does
}
然后你可以这样做:

var sock = new SimplSocket(someFunction, 1024,1,false);
如果不想定义额外的函数,可以使用lambda表达式直接表示该函数:

var sock = new SimplSocket(() => new System.Net.Sockets.Socket(...), 1024,1,false);
构造函数本身可以使用delegate
socketFunc
调用给定函数,它知道函数将返回一个
System.Net.Sockets.Socket
,但不知道使用哪个函数。这看起来就像这样:

 var aSock = socketFunc();
System.Func
是一个所谓的委托。它们用于保存函数。在这种特殊情况下,委托只接受返回
System.Net.Sockets.Socket
类型且没有参数的函数。例如:

您在某处定义了一个函数:

public System.Net.Sockets.Socket someFunction()
{
  //whatever it does
}
然后你可以这样做:

var sock = new SimplSocket(someFunction, 1024,1,false);
如果不想定义额外的函数,可以使用lambda表达式直接表示该函数:

var sock = new SimplSocket(() => new System.Net.Sockets.Socket(...), 1024,1,false);
构造函数本身可以使用delegate
socketFunc
调用给定函数,它知道函数将返回一个
System.Net.Sockets.Socket
,但不知道使用哪个函数。这看起来就像这样:

 var aSock = socketFunc();

我不明白你的意思。你又想干什么?您正在尝试实例化
SimpleSocket
、对其进行子类化还是重载另一个构造函数?@KirkWoll我正在尝试实例化SimpleSocket您需要向其传递一个不带参数并返回新套接字的方法(或lambda)。该方法将是参数
socketFunc
的参数。我不明白你的意思。你又想干什么?您正在尝试实例化
SimpleSocket
、对其进行子类化还是重载另一个构造函数?@KirkWoll我正在尝试实例化SimpleSocket您需要向其传递一个不带参数并返回新套接字的方法(或lambda)。该方法将是参数
socketFunc
的参数。感谢您给我这个术语,以便我可以用谷歌搜索它……该示例非常好,谢谢您是否有一个已知的设计模式,可以解释为什么或何时在构造函数中应用这种类型的委托?我刚刚开始做一个新项目,我开始从其他开发人员那里看到很多这样的结构,但是我不完全理解背后的意图。谢谢你给我这个术语,这样我就可以用谷歌搜索它了……这个例子很好,谢谢你,有没有一个已知的设计模式可以解释为什么或者什么时候在构造函数中应用这种类型的委托?我刚刚开始从事一个新项目,我开始从其他开发人员那里看到很多这样的结构,但我不完全理解背后的意图。