Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时使用;这";在变量赋值中_C# - Fatal编程技术网

C# 何时使用;这";在变量赋值中

C# 何时使用;这";在变量赋值中,c#,C#,如果我使用“this”,它会使mainist成为传递的实例;如果我不打这个。它是否仍然会使变量等效于同一个实例。。?这有什么意义?什么时候用在这类作业中 class Phonebook { private MainWindow MainInst; public Phonebook(MainWindow MainInstance){ this.MainInst = MainInstance; } } vs 当同一范围内有多个同名变量时,使用“this

如果我使用“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的指导原则不适用于私人成员,因为他们自己会破坏它们。我已经更新了我的答案。考虑做