为什么我可以在C#中执行此操作?(带有()的公共类

时间:2014-12-11 15:10:03

标签: c#

在C#中,为什么我能够使用以下代码编译和运行程序

public class HammingTFTP()
{
     //class variables here
     public HammingTFTP(string mode, string host, string fileName)
           :this()
     {
        //code here
     }
}

我在mac上编码并运行mono 3.6.0。我明白在类声明之后应该没有(),我应该删除:this()。只是想知道为什么这个编译并运行在第一位。这可能是给定版本的mono的错误吗?

2 个答案:

答案 0 :(得分:8)

这不是用.NET编译器编译的,但是它与Roslyn编译器一起编译。演示:https://dotnetfiddle.net/HkngI3

这是一个名为"主要构造函数"的C#6.0功能。见The New and Improved C# 6.0

它允许您在声明旁边声明类的主要构造函数,例如:

public class MyClass(string name)
{
    public string Name {get; } = name;  
}

答案 1 :(得分:1)

Mono 3.6.0已经支持C#6.0中的一些功能,如here所述。

在您的情况下,这是主要构造函数。有关详细信息,请参阅this language preview

不使用主构造函数,您的代码将转换如下:

public class HammingTFTP
{
    // generated via primary constructor
    public HammingTFTP()
    {
    }

    //class variables here
    public HammingTFTP(string mode, string host, string fileName)
       :this()
    {
       //code here
    }
}