我已经看到人们使用Pascal案例定义一个构造函数,他们使用与类名相同的名称。是必须的吗?如果不是,我不明白为什么c#知道该方法是构造函数。
答案 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() { }
}
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()
{
}
}
属性与方法类似,但是缺少括号,并且具有名为get
和set
的子块(或者是仅用于getter的属性的单表达式主体)。
[^ 1] C#语言规范实际上说构造函数签名的文本是其标识符,而不是类型名称-但效果是相同的。