2014-12-11 2 views
2

В C#, почему я смог скомпилировать и запустить программу со следующим кодомПочему я могу сделать это в C#? (Открытый класс с())

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

Я кодирования на макинтош и работает моно 3.6.0. Я понимаю, что после объявления класса должно быть no(), и я должен удалить: this(). Просто интересно, почему это компилируется и работает в первую очередь. Может быть, это ошибка с данной версией моно?

+3

Это не компилировать с компилятором .NET. – dcastro

+0

У вас есть '()' в конце вашего имени класса, также ** у вас нет конструктора без параметров без параметров, поскольку вы предоставили ему параметры в своем классе **, таким образом, ошибка с 'this' – Habib

+0

Что вы хотите достичь с помощью класса ClassName()? Это недопустимый синтаксис. –

ответ

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; 
} 
+0

Спасибо. Интересно, как он компилируется на некоторых компиляторах, а не на других. – Jem4687

+0

@ user3024509: Это называется: «новые спецификации». –

+0

@ user3024509 Спецификация C# 6.0 довольно недавно, некоторые компиляторы ее не поддерживают * еще *. На самом деле я даже не уверен, соответствует ли спецификация последней версии. – dcastro

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 
    } 
} 
+0

Спасибо. Приятно знать, что я не сумасшедший. – Jem4687

Смежные вопросы