Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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”指的是类变量中构造函数外部的变量。但是为什么不将参数的名称改为(string _name,string _alias),教程中所有的“this”示例都只是说明了显而易见的问题,但我想知道为什么在特定情况下需要使用这个关键字 private string name; private string alias; public Employee(string name, string alias) { this.name = name;

我知道关键字“this”指的是类变量中构造函数外部的变量。但是为什么不将参数的名称改为(string _name,string _alias),教程中所有的“this”示例都只是说明了显而易见的问题,但我想知道为什么在特定情况下需要使用这个关键字

private string name;
private string alias;
   public Employee(string name, string alias) 
    {
       this.name = name;
       this.alias = alias;
    }
我将私有成员变量命名为
\ux
,以避免此类情况1

另一方面,我反对命名参数,因为参数名称是公共合同的一部分2。这个契约应该是干净、稳定的,并且不应该由包含成员变量名的内部实现决定

过去,在这种情况下,我使用
employeeName
aName
theAlias
等名称作为参数,但我不喜欢最终使用的人工修饰符。如果我不能对私有变量使用下划线,我会使用
this.x
,而且不会三思而后行


1之所以需要此表单,是因为
在C#和变量阴影中是“隐式”的。也就是说,
this.x
是必需的,因为
x
将引用一个局部变量/参数,如果它存在的话-在这里就是这样

private string name;
public Employee(string name, string alias) 
{
   // Re-assignes parameter to itself.
   // Does NOT assign member variable!
   name = name;
}
2我相信名称中的下划线会破坏“CLS兼容性”,但我并不担心这一点,仅对私有成员变量使用此约定可避免公开此类不兼容的名称。

I命名私有成员变量
\u x
,以避免此类情况1

另一方面,我反对命名参数,因为参数名称是公共合同的一部分2。这个契约应该是干净、稳定的,并且不应该由包含成员变量名的内部实现决定

过去,在这种情况下,我使用
employeeName
aName
theAlias
等名称作为参数,但我不喜欢最终使用的人工修饰符。如果我不能对私有变量使用下划线,我会使用
this.x
,而且不会三思而后行


1之所以需要此表单,是因为
在C#和变量阴影中是“隐式”的。也就是说,
this.x
是必需的,因为
x
将引用一个局部变量/参数,如果它存在的话-在这里就是这样

private string name;
public Employee(string name, string alias) 
{
   // Re-assignes parameter to itself.
   // Does NOT assign member variable!
   name = name;
}

2我相信名称中的下划线会破坏“CLS兼容性”,但我并不担心这一点,仅对私有成员变量使用此约定可避免公开此类不兼容的名称。

在您的示例中,您可以在字段名上加下划线,因此不需要使用此
(这仍然是允许的,但不是必需的,因为如果与局部变量没有冲突,就可以推断出来)。事实上,微软的标准鼓励这样做

但是,在很多情况下,您可能需要
this
关键字

一个例子是,如果您在另一个类中有一个实用程序,该实用程序接受了
员工
,例如:

public static class Utility
{
    public static void SomeMethod(Employee employee)
    {
    }
}
如果要从
Employee
类中调用此实用程序,则必须将其称为
utility.SomeMethod(this);

此外,在当前实例上调用的扩展方法必须以
this.
开头。给定以下扩展方法:

public static class UtilityExtensionMethods
{
    public static void SomeExtensionMethod(this Employee employee)
    {
    }
}

如果要从
Employee
类中调用此扩展方法,则必须将其称为
this.SomeExtensionMethod();

,在示例中,可以在字段名上加下划线,这样就不需要
(这仍然是允许的,但不是必需的,因为如果与局部变量没有冲突,就可以推断出来)。事实上,微软的标准鼓励这样做

但是,在很多情况下,您可能需要
this
关键字

一个例子是,如果您在另一个类中有一个实用程序,该实用程序接受了
员工
,例如:

public static class Utility
{
    public static void SomeMethod(Employee employee)
    {
    }
}
如果要从
Employee
类中调用此实用程序,则必须将其称为
utility.SomeMethod(this);

此外,在当前实例上调用的扩展方法必须以
this.
开头。给定以下扩展方法:

public static class UtilityExtensionMethods
{
    public static void SomeExtensionMethod(this Employee employee)
    {
    }
}

如果要从
Employee
类中调用此扩展方法,则必须将其称为
this.SomeExtensionMethod();

请参见。否则,您将无法区分与参数和类字段的区别?您可以将其命名为_name,但它不是“漂亮的”,并说“_name=name”这只是命名约定。请看这里:看。否则,您将无法区分参数和类字段的区别?您可以将它们命名为_name,但它不是“漂亮的”,并说“_name=name”这只是命名约定..请看这里:根据Microsoft的指导原则,它们是针对字段的前缀..
不要对字段名或静态字段名应用前缀。特别是,不要对字段名应用前缀来区分静态字段和非静态字段。例如,应用g_u或s_u前缀是inc正确。
,但许多用户()前缀..我反对前缀..;-)@试图改进我不会使用
g
s.
。这显然是错误的(对我来说),特别是在表示静态/非静态变量时。
m
太吵了,但我发现私有成员变量的
正好。我实际上添加了,并遵循:我不与你争论:-)我可以看到这样做的优点/缺点。在JavaScript中,我在“privates”前面加上
。但在C#中,我的私人是骆驼案,公众是骆驼案。我不记得上一次我必须有一个“公共”字段了。根据微软的指导方针,这些字段的前缀再次出现<代码>不要对字段名或静态字段名应用前缀。明确地