2015-06-14 126 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?)); 
相關問題