2015-06-14 90 views
-1

我想在我的项目中使用websocket。 这样做,我安装了微软的Asp.Net SignalR包,它由WebSocketHandler抽象类组成。 我定义了一个类继承WebSocketHandler,但编译器抱怨: 'Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler'不包含一个构造函数,它带有0个参数'。因为WebSocketHandler ctor的definitioin得到一个可为空的值,这意味着ctor可能没有参数, 定义如下: protected WebSocketHandler(int?maxIncomingMessageSize);为什么编译器抱怨WebSocketHandler缺少ctor?

有人能告诉我问题是什么吗? 谢谢。

+0

'nullable parameter'与'no parameter'不一样。只需定义一个不带参数的构造函数并将null传递给另一个ctor。 – muratgu

回答

0

protected成员是派生类的实例和T访问这里没什么特别的。课程本身没什么特别的,要么@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) 
    {} 
} 
+0

谢谢大家试图帮助我..仍然我不明白为什么编译器抱怨:'Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler'不包含一个构造函数,它采用0参数'。的确,我不能改变WebSocketHandler类并添加一个需要0个参数的ctor。我应该怎么做才能纠正这个错误? –

+0

编辑我的答案,希望它有帮助。 –

+0

非常感谢。你帮了我很多。 –

1

看来奇怪的我,因为WebSocketHandler构造函数的definitioin得到一个空值,这意味着男星也拿不出参数

不,不。接收可空类型的null值与完全不接收值之间存在很大差异。

如果参数是可选的,那将是一个不同的问题 - 但事实并非如此。你在提供一个参数可转换为int?在调用中。如果您想为int?提供空值,这样做的:

var handler = new WebSocketHandler(null); 

或者,如果你想避免不小心使用任何其他单参数的构造函数的定义可以适用与null文字作为参数,你可以用途:

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

或者:

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