我有一个服务器,其中每个连接的客户端都由客户端类的实例表示。该类负责数据处理。我一直认为,即使有相同类的更多实例,在调用私有函数时,我也不需要使用“this”关键字,因为它被视为本地调用,同时:
if (data[1]==2 && data [3]==2)
SendAck();
但是当有更多的玩家(更多的客户端类)时,有时会将消息发送给另一个玩家,而其他方法也是如此。当我将“this”添加到所有方法调用时,一切正常。是否可能没有“这个”它从其他类调用方法? 谢谢!
EDITL:在每个实例中使用公共字典等公共成员,然后在调用TryGetValue /时不使用此关键字/?
答案 0 :(得分:3)
不,这是不可能的。 “这个”几乎都是可选的。您需要它的情况是,如果您有一个方法(例如您的构造函数)接受与您的类的字段相同名称的参数,并且您希望将这些参数的值分配给字段,例如:
class Test
{
private string strValue;
public Test(string strValue)
{
this.strValue = strValue;
}
}
我认为你的代码中还有另一个问题。你能提供更多细节吗?
答案 1 :(得分:1)
SendAck();
和this.SendAck();
之间没有任何区别,如果该方法是您班级的成员。您将始终从调用该方法的实例调用该方法。
使用调试器检查调用方法实际执行的操作。您会看到它是相同的方法,有或没有this
关键字。
答案 2 :(得分:0)
来自C#规范:
7.5.7此访问
...
当在一个中的primary-expression中使用它时 实例方法或实例访问器 一类,它被归类为 值。值的类型是 类的实例类型(第10.1.1节) 使用发生的地方,和 值是对象的引用 该方法或访问者是 调用强>
我怀疑您在代表连接客户端的类型实例的多线程访问方面存在问题。