C# 何时使用;这";在变量赋值中
如果我使用“this”,它会使C# 何时使用;这";在变量赋值中,c#,C#,如果我使用“this”,它会使mainist成为传递的实例;如果我不打这个。它是否仍然会使变量等效于同一个实例。。?这有什么意义?什么时候用在这类作业中 class Phonebook { private MainWindow MainInst; public Phonebook(MainWindow MainInstance){ this.MainInst = MainInstance; } } vs 当同一范围内有多个同名变量时,使用“this
mainist
成为传递的实例;如果我不打这个。它是否仍然会使变量等效于同一个实例。。?这有什么意义?什么时候用在这类作业中
class Phonebook
{
private MainWindow MainInst;
public Phonebook(MainWindow MainInstance){
this.MainInst = MainInstance;
}
}
vs
当同一范围内有多个同名变量时,使用“this”关键字。例如,如果您的构造函数具有签名
公用电话簿(MainWindow MainInst)
,则您必须说this.MainInst=MainInst
,以避免歧义。当您在同一范围内有多个同名变量时,将使用“this”关键字。例如,如果您的构造函数具有签名公用电话簿(MainWindow MainInst)
,那么您必须说this.MainInst=MainInst
,以避免歧义。在这种情况下,这并不重要,因为它是明确的
但如果你有:
class Phonebook
{
private MainWindow MainInst;
public Phonebook(MainWindow MainInst){
MainInst = MainInst;
}
}
那么代码就不再正确了。它会将参数分配给自身。你必须使用这个来纠正它
我的建议是:对类、局部变量和私有成员使用不同的命名约定。一个例子是:
class Phonebook
{
private MainWindow _mainInst;
public Phonebook(MainWindow mainInst){
_mainInst = mainInst;
}
}
现在,您可以第一眼看到您正在将局部变量(因为它以小写字母开头)分配给私有成员(因为它以下划线开头),而不使用this
注意,根据Alexei的评论,这只是许多可能约定中的一种。Microsoft建议公开课程/成员。C#code中被广泛接受的惯例是:
- 类、属性和事件应以大写字母开头
- 接口应以
I
开头,后跟大写字母
- 本地人应该以小写字母开头
这些都不应该包含下划线(除了单元测试方法)
至于私人会员,有很多惯例,所以选择你自己的
- 有些人喜欢像局部变量一样命名私有成员,他们明确地使用
this
- 有些人在前面的例子中加了下划线
- 有些使用前缀,如
my
或m
(匈牙利符号)
甚至微软也为他们的私人会员提供服务。你应该选择一个惯例并坚持它。在这种情况下,它并不重要,因为它是明确的
但如果你有:
class Phonebook
{
private MainWindow MainInst;
public Phonebook(MainWindow MainInst){
MainInst = MainInst;
}
}
那么代码就不再正确了。它会将参数分配给自身。你必须使用这个来纠正它
我的建议是:对类、局部变量和私有成员使用不同的命名约定。一个例子是:
class Phonebook
{
private MainWindow _mainInst;
public Phonebook(MainWindow mainInst){
_mainInst = mainInst;
}
}
现在,您可以第一眼看到您正在将局部变量(因为它以小写字母开头)分配给私有成员(因为它以下划线开头),而不使用this
注意,根据Alexei的评论,这只是许多可能约定中的一种。Microsoft建议公开课程/成员。C#code中被广泛接受的惯例是:
- 类、属性和事件应以大写字母开头
- 接口应以
I
开头,后跟大写字母
- 本地人应该以小写字母开头
这些都不应该包含下划线(除了单元测试方法)
至于私人会员,有很多惯例,所以选择你自己的
- 有些人喜欢像局部变量一样命名私有成员,他们明确地使用
this
- 有些人在前面的例子中加了下划线
- 有些使用前缀,如
my
或m
(匈牙利符号)
甚至微软也为他们的私人会员提供服务。你应该选择一个惯例并坚持下去。在这种情况下,这无关紧要。如果您有private MainWindow MainInstance代码>不管它有多重要。很多。只有当实例成员和局部变量之间存在名称冲突时才是必需的。想象一下如果mainist=mainstance代码>按你的建议做了x=y
将是y=y
。旁注:特定的编码准则可能要求所有成员始终使用此前缀。
前缀。如果您在大型代码库中看到这段代码,并且经常使用this.
前缀,无论它是否严格要求,这可能适用于您的问题。在这种情况下,这无关紧要。如果您有private MainWindow MainInstance代码>不管它有多重要。很多。只有当实例成员和局部变量之间存在名称冲突时才是必需的。想象一下如果mainist=mainstance代码>按你的建议做了x=y
将是y=y
。旁注:特定的编码准则可能要求所有成员始终使用此前缀。
前缀。如果您在大型代码库中看到此代码,并且经常使用this.
前缀,无论它是否严格要求,这可能适用于您的问题。这个答案在某种程度上是错误的,因为它意味着您可以使用this
更改任何范围中的范围引用,虽然它只更改实例方法内部的本地成员和实例成员之间的作用域。但这个答案在某种程度上是错误的,因为它意味着您可以使用This
更改任何作用域中的作用域引用,而它只更改实例方法内部的本地成员和实例成员之间的作用域。+1。考虑清楚,使用成员的前缀是许多编码准则中的一种。请注意,它不是Microsoft建议的.Net/C的一部分,因此在公共示例中使用它(如once on so)可能会对代码的样式引起不必要的注意,特别是在从多个源不一致地复制/粘贴代码的情况下。@Alexei说得很好,但MS的指导原则不适用于私人成员,因为他们自己会破坏它们。我已经更新了我的答案。考虑做