Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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# 什么是与PHP';s";赛尔夫::“;?_C#_Oop - Fatal编程技术网

C# 什么是与PHP';s";赛尔夫::“;?

C# 什么是与PHP';s";赛尔夫::“;?,c#,oop,C#,Oop,在C#中,当我想从一个类的另一个静态方法调用该类的静态方法时,是否有一个通用前缀,我可以使用PHP的self::来代替类名 因此,在下面的示例中,与其说Customer.DatabaseConnectionExists(),不如说Self.DatabaseConnectionExists()这样的话,例如,以后如果我更改了类的名称,我就不必更改所有前缀了 class Customer { public string FirstName { get; set; } public s

在C#中,当我想从一个类的另一个静态方法调用该类的静态方法时,是否有一个通用前缀,我可以使用PHP的
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()调用方法,因为它违反了大多数设计准则。另一方面,
与字段和属性的用法差别很大。