c#这个关键字
我知道关键字“this”指的是类变量中构造函数外部的变量。但是为什么不将参数的名称改为(string _name,string _alias),教程中所有的“this”示例都只是说明了显而易见的问题,但我想知道为什么在特定情况下需要使用这个关键字c#这个关键字,c#,C#,我知道关键字“this”指的是类变量中构造函数外部的变量。但是为什么不将参数的名称改为(string _name,string _alias),教程中所有的“this”示例都只是说明了显而易见的问题,但我想知道为什么在特定情况下需要使用这个关键字 private string name; private string alias; public Employee(string name, string alias) { this.name = name;
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#中,我的私人是骆驼案,公众是骆驼案。我不记得上一次我必须有一个“公共”字段了。根据微软的指导方针,这些字段的前缀再次出现<代码>不要对字段名或静态字段名应用前缀。明确地