为什么编译器抱怨缺少WebSocketHandler的ctor?

时间:2015-06-14 20:33:03

标签: asp.net

我正在尝试在我的项目中使用websocket。 为此,我安装了Microsoft Asp.Net SignalR包,它由WebSocketHandler抽象类组成。 我定义了一个继承WebSocketHandler的类,但编译器抱怨: 'Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler'不包含带0个参数的构造函数。 这对我来说似乎很奇怪,因为WebSocketHandler ctor的definitioin获得了一个可以为空的值,这意味着ctor可能没有参数, 定义如下:  protected WebSocketHandler(int?maxIncomingMessageSize);

谁能告诉我这是什么问题? 感谢。

2 个答案:

答案 0 :(得分:1)

  

对我来说似乎很奇怪,因为WebSocketHandler ctor的definitioin获得了一个可以为空的值,这意味着ctor可能没有参数

不,它没有。接收可空类型的null值与根本不接收值之间存在很大差异。

如果参数是可选的,那将是另一回事 - 但事实并非如此。您拥有以在通话中提供可转换为int?的参数。如果要为int?提供空值,请执行以下操作:

var handler = new WebSocketHandler(null);

或者,如果您想避免意外使用可能适用于null字面值作为参数的任何其他单参数构造函数定义,您可以使用:

var handler = new WebSocketHandler((int?) null);

或者:

var handler = new WebSocketHandler(default(int?));

答案 1 :(得分:0)

protected成员可以通过派生类实例访问,并且没有任何特殊之处。班级本身没有什么特别之处,@ WebSocketHandler.cs

只是你需要传递一个可以为空的类型,这并不意味着它不能得到任何参数。

int? maxIncomingMessageSize = 0;
var socket = new WebSocketHandler(maxIncomingMessageSize);

在派生类中,你可以/应该定义一个“带0参数的构造函数”。

public class MyHandler : WebSocketHandler
{
    // not mandatory
    public MyHandler()
      :this(null) 
    {}

    // mandatory
    public MyHandler(int? maxIncomingMessageSize)
      :base(maxIncomingMessageSize) 
    {}
}