你在实例变量前面使用'this'吗?

Pra*_*ter 10 c# coding-style

当从类本身访问类的实例变量或属性时,是否用" this." 前缀它们?

Aln*_*tak 28

我只this.在构造函数或setter中使用前缀,主要是在传递的参数与相关成员变量具有相同名称的情况下.

  • 同意.我只是添加它来消除歧义. (5认同)
  • 进一步同意.我讨厌为setter设置不匹配的名字.它没有多大意义. (3认同)

Gre*_*g D 21

在C#中,我绝对会这样做.主要原因是:

  1. 是否这样做是一个风格问题.尽管发生了所有的战斗,我不相信有一个客观上更好的方法.

  2. 我的源分析工具(StyleCop)默认需要this.在实例访问之前.我的第一点暗示我不应该太在意我是否总是这样做或者总是不这样做,并且因为默认的StyleCop设置总是要求它,我采取阻力最小/最大一致性的路径并遵循默认设置.

我对大多数风格问题都遵循这一理念.我非常喜欢不在自动格式化IDE中更改默认格式选项.它只是让每个人的生活更加艰难,而不是那么重要.

  • Resharper的默认格式化会删除所有'this.'.我不使用'这个'.除非我不能没有. (2认同)
  • @robert通过说这是他的风格,我同意,在这种情况下,确实没有普遍正确的行为.使用默认设置可以更轻松地在别人的办公桌上工作或查看其他人的代码... (2认同)

Rob*_*zak 11

不,我觉得它是视觉噪音.我认为这个变量是错误命名风格的拐点.在我的类型中,我应该能够管理字段,属性和方法的命名.

绝对没有理由将您的支持字段命名为"myfield",将构造函数的参数命名为"myField",将属性命名为"myField".

 public class TestClass
 {
    private string myField;
    public TestClass(string myField)
    {
      this.myField = myField;
    }
    public string MyField {get { return myField;} set {myField = value}}
 }
Run Code Online (Sandbox Code Playgroud)

就个人而言,我总是在所有私人支持字段中添加_的前缀.

 public class TestClass
 {
    private string _myField;
    public TestClass(string myField)
    {
      _myField = myField;
    }
    public string MyField {get { return _myField;} set {_myField = value}}
 }
Run Code Online (Sandbox Code Playgroud)

现在使用C#中的自动属性

 public class TestClass
 {
    private string MyField {get; set;}
    public TestClass(string myField)
    {
      MyField = myField;
    }
 }
Run Code Online (Sandbox Code Playgroud)

除了以上可能是你唯一的另一次输入.是因为你想看到当前类型的intellisense.如果您需要这样做,那么我认为您的类型太大,可能不遵循单一责任原则.让我们说你是.为什么保持这个.实际拨打电话后.重构它.


Hum*_*art 8

它增加了混乱.所以不行.


Aar*_*els 7

绝对.'this'避免需要任何前缀,例如m_.更重要的是,它可以快速提高代码的性能,这就是为什么:

我真的接受了微软警察(FxCop,StyleCop).他们真的帮助我捕捉到通常我甚至都不会想到的事情.例如,如果方法不引用任何成员变量,则FxCop的一个建议是将该方法标记为静态,因此不必将该方法分配给该类的每个实例.来自MSDN:

不访问实例数据或调用实例方法的方法可以标记为static(在Visual Basic中为Shared).将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点.发出非虚拟调用站点将阻止在运行时检查每个调用,以确保当前对象指针为非null.这可以为性能敏感的代码带来可测量的性能提升.在某些情况下,无法访问当前对象实例表示正确性问题.

使用'this'为我的成员变量添加前缀.为我做两件事.首先,它满足StyleCop.其次,更重要的是,它可以帮助我快速确定某个方法是否需要标记为静态.

当然,运行FxCop会告诉我是否需要将方法标记为静态.但是,使用'this'.帮助我花更多的时间编写新代码,减少补救FxCop违规的时间.


And*_*eiM 5

我认为这种做法大多数时候都能提高易读性,所以是的.