C# 您是否使用';这';在实例变量前面?
当从类本身访问实例变量或类的属性时,是否在它们前面加上“C# 您是否使用';这';在实例变量前面?,c#,coding-style,C#,Coding Style,当从类本身访问实例变量或类的属性时,是否在它们前面加上“this.”?每当我有一个名称与实例变量相同的方法参数时(很少),以避免混淆。否,但我写了很多VB;) 大约只有在我记不起成员的确切名称或需要用同名函数参数来区分它时,我才会检查此/Me。不!我当然可以看出这可能是有益的,但我所做的任何工作都不够复杂,不需要另一个层次的澄清。我只在构造函数或setter中使用前缀,主要是在传递的参数与相关成员变量同名的情况下。在C#中,我绝对会这样做。主要原因是: 是否这样做是一个问题 文体问题。尽管如此
this.
”?每当我有一个名称与实例变量相同的方法参数时(很少),以避免混淆。否,但我写了很多VB;)
大约只有在我记不起成员的确切名称或需要用同名函数参数来区分它时,我才会检查此/Me。不!我当然可以看出这可能是有益的,但我所做的任何工作都不够复杂,不需要另一个层次的澄清。我只在构造函数或setter中使用
前缀,主要是在传递的参数与相关成员变量同名的情况下。在C#中,我绝对会这样做。主要原因是:
是否这样做是一个问题
文体问题。尽管如此
持续的战斗,我不知道
相信有一个客观的
更好的方法
我的源代码分析工具()
默认情况下需要此项。
在
前端实例访问。我的
第一点暗示我不应该这样做
我很在乎我是否总是这样
或者总是不,因为
默认的StyleCop设置为
总是需要它,我走这条路
阻力最小/最大的
一致性和我遵循默认值
背景
对于大多数文体问题,我都遵循这一理念。我非常喜欢在自动格式化IDE中不更改默认格式化选项。这只会让每个人的生活变得更加艰难,因为有些事情其实并不那么重要。我们使用的ReSharper能够很好地管理所有这些。大多数情况下,我们会删除“this”,除非将其保存在构造函数中,因为我们通常使用同名的构造函数参数。我认为这种做法在大多数情况下会提高易读性,所以是的。它会增加混乱。所以没有。我有。当VisualStudio中的Intellisense不再像现在这样聪明时,我就养成了这个习惯
我认为这不会让我分心,因为我写了很多Python,并且习惯于在任何地方看到self。只有在需要区分参数时,如在setter或构造函数中。我认为它在不必要的情况下的使用是“代码垃圾”,类似于Edward Tufte的。噪声,而不是信号。如果实例变量名与方法参数相同,它不再是“澄清的理由”。如果不进行预处理,可能会导致缺陷
我想这就是本的意思——但我只是想强调——这不再是最佳实践的问题
我经常这样做-增加清晰度。
我不认为这会增加混乱——因为我们的大脑很快就能读懂它,但记录到它绝对是一个实例变量这“避免了任何前缀的需要,例如m_3;”。更重要的是,它可以快速提高代码的性能,这就是为什么:
我真的很喜欢微软的cop(FxCop,StyleCop)。他们真的帮助我抓住了平时我根本不会想到的事情。例如,如果一个方法没有引用任何成员变量,FxCop的一个建议是将该方法标记为静态,这样就不必将该方法分配给类的每个实例。发件人:
不访问实例的方法
可以使用数据或调用实例方法
标记为静态(在Visual Studio中共享)
基本的)。在将方法标记为
静态,编译器将发出
这些服务的非虚拟呼叫站点
成员。发出非虚拟呼叫
站点将阻止在运行时进行检查
对于确保
当前对象指针为非空。
这可以产生可测量的结果
性能增益
性能敏感代码。在某些方面
在某些情况下,无法访问
当前对象实例表示一个
正确性问题
在我的成员变量前面加上“this.”对我来说有两件事。首先,它满足了StyleCop。其次,也是更重要的,它帮助我快速确定一个方法是否需要标记为静态
当然,运行FxCop会告诉我是否需要将方法标记为静态。但是,使用“这个”有助于我花更多的时间编写新代码,更少的时间来修正FXCOP违规。 < P>不,我认为它是视觉噪声。我认为这个变量是糟糕命名风格的支柱。在我的类型中,我应该能够管理字段、属性和方法的命名
绝对没有理由将支持字段命名为“myfield”,将构造函数的参数命名为“myfield”,将属性命名为“myfield”
就我个人而言,我总是在所有私人支持字段中添加前缀u
public class TestClass
{
private string _myField;
public TestClass(string myField)
{
_myField = myField;
}
public string MyField {get { return _myField;} set {_myField = value}}
}
现在在C#中有了自动属性
除了上面提到的可能是你唯一一次打这个。是因为您想查看当前类型的intellisense。如果你需要这样做,那么我认为你的类型太大了,可能没有遵循标准。让我们说你是。为什么要保留这个。在你真正打电话之后。重构它。我是这样做的,对我来说,它使代码更加清晰,是在当前过程中还是在类中?是的,如果我看到这个。我相信这是本地的,我不需要再看下去了。如果它的前缀不是这个。(或者可能是“"”)我必须检查它是在本地还是在祖先中声明的,或者它是一个参数还是
在调试过程中,所有这些检查都会花费更多的时间…我做了很多工作,只是因为它会弹出自动完成对话框。通常是的,我会。交流范围是可读性的一个重要方面。它将其与局部变量、静态方法等区分开来。它还传达了定义是“附近的”
哦,我只对公共方法/属性执行此操作。这些都是资本化的,所以这件事看起来是对的。内部视图看起来像外部视图(myInstance.Thing)。普里夫
public class TestClass
{
private string _myField;
public TestClass(string myField)
{
_myField = myField;
}
public string MyField {get { return _myField;} set {_myField = value}}
}
public class TestClass
{
private string MyField {get; set;}
public TestClass(string myField)
{
MyField = myField;
}
}