C#属性和此关键字

C#属性和此关键字,c#,properties,this-keyword,C#,Properties,This Keyword,我应该在什么时候为代码中的属性使用this-关键字 public class MyClass { public string MyString { get; private set; } public void MyMethod() { OtherClass.DoStuff(MyString); // Or this.MyString? } } 我知道如果属性的类型和名称是相同的,那么你就可以使用它 public string Emailer Email

我应该在什么时候为代码中的属性使用
this
-关键字

public class MyClass {
    public string MyString { get; private set; }
    public void MyMethod() {
        OtherClass.DoStuff(MyString); // Or this.MyString?
    }
}
我知道如果属性的类型和名称是相同的,那么你就可以使用它

public string Emailer Emailer { get { return _emailer; } }

在类中对属性甚至方法使用
this.
的指导原则是什么?我知道编译后的代码没有什么不同。都是关于。。。屏住呼吸。。。最佳实践。

做您和您的团队认为最具可读性的事情。有些人喜欢直言不讳;我只在实际需要时指定
。这对编译后的代码没有影响。

做您和您的团队认为最可读的事情。有些人喜欢直言不讳;我只在实际需要时指定
。它对编译的代码没有任何影响。

如果参数名和实例成员具有相同的名称,则需要使用
this

比如:


但是我建议你选择你永远不需要使用的名字。否则只会自找麻烦-迟早你会忘记
这个
,调试代码会很困难。

如果参数名和实例成员同名,你需要使用
这个

比如:


但是我建议你选择你永远不需要使用的名字。否则只会自找麻烦-迟早你会忘记这个,调试代码会很困难。

是否使用这个主要是偏好的问题,因此没有正确或错误的答案。这可能会成为一个有点宗教战争,虽然与开发人员。我经常发现,最好以这种或那种方式就团队达成一致,然后使用StyleCop来执行决策

就我个人而言,我更喜欢简洁,只在实际需要时才使用
。但我会选择代码库一致性而不是我的个人偏好,因为这是一个相当小的问题


在一些情况下,它是明确需要的。在这种情况下,以及在某些情况下消除标识符歧义的扩展方法浮现在脑海中。但是我发现这些是相当罕见的。

是否使用
这主要是一个偏好问题,因此没有正确或错误的答案。这可能会成为一个有点宗教战争,虽然与开发人员。我经常发现,最好以这种或那种方式就团队达成一致,然后使用StyleCop来执行决策

就我个人而言,我更喜欢简洁,只在实际需要时才使用
。但我会选择代码库一致性而不是我的个人偏好,因为这是一个相当小的问题


在一些情况下,它是明确需要的。在这种情况下,以及在某些情况下消除标识符歧义的扩展方法浮现在脑海中。但我发现这些代码非常罕见。

这个问题主要是为了得到一些提示,说明如何证明一个代码比另一个更具可读性。@Seb:这只是个人偏好-您喜欢非常紧凑的代码吗?有时您可能需要多想一想,才能理解您使用的是实例变量还是局部变量变量或者您更喜欢更长、更明确的代码?啊,“明确”,这是一个关键字,可以帮助我解决我的基本问题。在你的答案中提到这一点,并获得常规双向飞碟复选标记:P@Seb字体看第二句:“有些人喜欢直言不讳。”问这个问题主要是为了得到一些关于如何证明一个比另一个可读性更好的提示。@Seb:这真的只是个人偏好-你喜欢非常紧凑的代码吗?有时你可能需要多想一想才能理解你是在使用实例变量还是局部变量。。。或者您更喜欢更长、更明确的代码?啊,“明确”,这是一个关键字,可以帮助我解决我的基本问题。在你的答案中提到这一点,并获得常规双向飞碟复选标记:P@Seb:请看第二句:“有些人喜欢明确表达。”+1用于提及扩展方法。旁注:当您在接口或基类上定义了扩展方法,并希望从实现该接口或基类的类内部使用扩展方法时,这很可能是一个问题,否则您最好将其作为派生类上的方法实现。+1用于提及扩展方法。旁注:当您在接口或基类上定义了扩展方法,并且希望从实现该接口或基类的类内部使用扩展方法时,这很可能是一个问题,否则您最好将其作为派生类上的方法实现。
public class MyClass
{
    private string something;

    public void SomeMethod (string something)
    {
        this.something = something;
    }
}