2009-10-05 58 views
0

我有一個服務器,其中每個連接的客戶端由一個客戶端類的實例表示。這個類負責數據處理。我始終認爲,調用,即使有同一個類的多個實例,我不需要用「這個」關鍵字,因爲其作爲本地呼叫考慮,也私有函數:使用「this」 - 許多類的實例,調用私有方法

if (data[1]==2 && data [3]==2) 
    SendAck(); 

但是,當有更多的玩家(更多的客戶端類),有時候這個消息被髮送給另一個玩家,並且與其他方法一樣。當我向所有的方法調用添加「this」時,所有都可以。有沒有可能沒有「這個」它稱爲其他類的方法? 謝謝!

EDITL:如何在每個實例中使用公共字典等公共字典,然後在調用TryGetValue時不使用此關鍵字/?

+1

1.您是否可能調用靜態方法? – 2009-10-05 07:12:24

+0

拿走你的'這是和運行一些測試 - 是有時行爲一致和可重複嗎?發生這種行爲的地方常見的是什麼? – 2009-10-05 07:15:49

+0

不,這是非常隨機和罕見的問題。 – Petr 2009-10-05 07:42:35

回答

0

從C#規格:

7.5.7此訪問

...
當這是在基本表達式中使用的類的一個實例 方法或實例訪問 內,它是歸類爲 值。類型的值的是在其內使用的發生類 的 實例類型(§10.3.1),和 的值是到對象 的量,方法或訪問是 調用的參考。

我懷疑你有多線程訪問表示連接客戶端的類型實例的問題。

+0

有線程池,所以這應該不成問題。公共membmbers怎麼樣< – Petr 2009-10-05 07:14:53

+0

線程池本身並不保證訪問共享狀態是安全的。以上摘錄對於所有實例(無論具有哪種可訪問性)的方法和訪問器均適用。 – 2009-10-05 07:22:48

1

如果該方法是您班級的成員,則SendAck();this.SendAck();之間沒有任何差異。您將始終從調用該方法的實例中調用該方法。

使用調試器檢查調用時實際執行的方法。您會看到,這是相同的方法,無論有沒有this關鍵字。

+0

這個。SendAck()可以是擴展方法調用(該特定類的synaxical糖) – 2011-02-02 03:38:53

+0

但是,如果在當前類中有一個'SendAck'方法,'SendAck()'和'this.SendAck()'將會調用* *方法,因爲它優先於擴展方法。 – Groo 2011-02-02 08:51:22

3

不,這是不可能的。 「這個」幾乎都是可選的。如果你有一個方法(例如你的構造函數),它需要的參數名稱與你的類的字段相同,並且你想將這些參數的值賦給這些字段,例如:

class Test 
{ 
    private string strValue; 

    public Test(string strValue) 
    { 
     this.strValue = strValue; 
    } 
} 

我認爲你的代碼還有另一個問題。你能否提供更多細節?

+0

也許是因爲有些方法是公開的? – Petr 2009-10-05 07:18:25

+0

不可以。公開/私人限定符與它無關。 – DevSolar 2009-10-05 07:24:24

+0

對不起,我不能給你更多的細節,它非常複雜的應用程序,當我將這個關鍵字添加到某些方法調用時,所有問題突然停止。這就像是從不同的實例類的方法被執行。 – Petr 2009-10-05 07:40:26

相關問題