C#如何知道哪个方法是构造函数

时间:2019-04-30 11:16:23

标签: c#

我已经看到人们使用Pascal案例定义一个构造函数,他们使用与类名相同的名称。是必须的吗?如果不是,我不明白为什么c#知道该方法是构造函数。

4 个答案:

答案 0 :(得分:2)

是的,这是必须的。如果不提供构造函数,则编译器会为您创建一个构造函数(称为默认构造函数),并自动设置成员的默认值。

答案 1 :(得分:1)

构造函数的名称与类的名称相同。也没有返回类型。

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constructors

答案 2 :(得分:1)

构造函数没有返回类型,并且必须与类具有相同的名称(区分大小写)。

承包商


class TestClass
{
    // this is a constructor which has no returntype
    public TestClass() { } 
}

Mehtod

class TestClass2
{
    // This is a method as we see at the return type "int".
    public int TestClass2() { return 1; } // This won't compile: "member names cannot be the same as their enclosing type"
}

有关更多信息,请查看此:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/constructors

答案 3 :(得分:0)

在C#中,方法同时具有return-type identifier(和括号):

[<modifiers>...] <return-type> <identifier>( [<parameters>...] )
{
}

例如:

class Baz
{
    Foo Bar()
    {
    }

    [Obsolete]
    protected internal static async Task<String> GetSomethingAsync( [NotNull] Something else )
    {
    }
}

构造函数仅指定一个type-name [^ 1],并且也带有括号。 return-type必须与父类型名称匹配(可以说是多余的,而像TypeScript这样的较新语言则改为使用constructor作为关键字)

[<modifiers>...] <type-name>( [<parameters>...] )
{
}

例如:

class Foo
{
    Foo()
    {
    }
}

属性与方法类似,但是缺少括号,并且具有名为getset的子块(或者是仅用于getter的属性的单表达式主体)。

[^ 1] C#语言规范实际上说构造函数签名的文本是其标识符,而不是类型名称-但效果是相同的。