C# 什么是与PHP';s";赛尔夫::“;?
在C#中,当我想从一个类的另一个静态方法调用该类的静态方法时,是否有一个通用前缀,我可以使用PHP的C# 什么是与PHP';s";赛尔夫::“;?,c#,oop,C#,Oop,在C#中,当我想从一个类的另一个静态方法调用该类的静态方法时,是否有一个通用前缀,我可以使用PHP的self::来代替类名 因此,在下面的示例中,与其说Customer.DatabaseConnectionExists(),不如说Self.DatabaseConnectionExists()这样的话,例如,以后如果我更改了类的名称,我就不必更改所有前缀了 class Customer { public string FirstName { get; set; } public s
self::
来代替类名
因此,在下面的示例中,与其说Customer.DatabaseConnectionExists()
,不如说Self.DatabaseConnectionExists()
这样的话,例如,以后如果我更改了类的名称,我就不必更改所有前缀了
class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public static Customer GetCurrentCustomer()
{
if (Customer.DatabaseConnectionExists())
{
return new Customer { FirstName = "Jim", LastName = "Smith" };
}
else
{
throw new Exception("Database connection does not exist.");
}
}
public static bool DatabaseConnectionExists()
{
return true;
}
}
不,没有。但是使用重构工具,更改类的名称应该不会让您太担心。如果您是从类内部调用该方法,则不需要指定::Self之类的内容,只需指定方法名称即可
class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public static Customer GetCurrentCustomer()
{
if (DatabaseConnectionExists())
{
return new Customer { FirstName = "Jim", LastName = "Smith" };
}
else
{
throw new Exception("Database connection does not exist.");
}
}
public static bool DatabaseConnectionExists()
{
return true;
}
}
没有真正的等价物-您必须指定类名,即
Customer.DatabaseConnectionExists()
或者完全错过了资格赛,即
DatabaseConnectionExists()
后一种通话方式是可取的,因为它更简单,不会失去任何意义。此外,它与实例中的方法调用更为内联(即通过
InstanceMethod()
调用,而不是this.InstanceMethod()
,这太冗长了)。只需省去它即可DatabaseConnectionExists
在类中定义 不用任何前缀就可以调用它。我什么都不知道,但是为什么不直接通过上下文菜单转到“重构”呢?它同样可以避免手动编辑的麻烦,但至少从我阅读PHP代码的经验来看,如果你看到“self::”你知道你正在引用那个类,不管它被调用什么,如果你看到“Customer:”你必须环顾四周,看看自己是否真的属于客户类别。它只是让代码更明确一些,这是我过去经常看到的。我写的是相同的答案+我们可以使用重构工具以防我们想要更改类名的事实。就我个人而言,我使用“Resharper”重构工具。我认为如果您使用“this.”例如实例方法和“ClassName.”将使您的代码更易于阅读。对于静态方法,否则您只需看一眼方法调用就不知道它是用于实例还是静态方法。从PHP到C#我觉得我经常需要在代码的上下文中寻找差异。@Edward Tanguay:我知道你为什么会这样想,但实际上它太冗长了(至少在我看来)。您很少会看到使用此.MethodName()调用方法,因为它违反了大多数设计准则。另一方面,此
与字段和属性的用法差别很大。