С struct (C# Reference)
в MSDN:
Когда вы создаете объект структуры с помощью оператора new, он создается и вызывается соответствующий конструктор. В отличие от классов, структуры могут быть созданы без использования оператора new. Если вы не используете new, поля останутся неназначенными, и объект нельзя будет использовать, пока все поля не будут инициализированы.
Насколько я понимаю, вы не сможете использовать структуру должным образом без использования new , если не будете уверены, что инициализируете все поля вручную. Если вы используете оператор new, конструктор сделает это за вас.
Надеюсь, это прояснит. Если вам нужно разъяснение, дайте мне знать.
Редактировать
Там довольно длинная ветка комментариев, поэтому я решил добавить сюда немного больше. Я думаю, что лучший способ понять это - попробовать. Создайте консольный проект в Visual Studio под названием «StructTest» и скопируйте в него следующий код.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace struct_test
{
class Program
{
public struct Point
{
public int x, y;
public Point(int x)
{
this.x = x;
this.y = 5;
}
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
// It will break with this constructor. If uncommenting this one
// comment out the other one with only one integer, otherwise it
// will fail because you are overloading with duplicate parameter
// types, rather than what I'm trying to demonstrate.
/*public Point(int y)
{
this.y = y;
}*/
}
static void Main(string[] args)
{
// Declare an object:
Point myPoint;
//Point myPoint = new Point(10, 20);
//Point myPoint = new Point(15);
//Point myPoint = new Point();
// Initialize:
// Try not using any constructor but comment out one of these
// and see what happens. (It should fail when you compile it)
myPoint.x = 10;
myPoint.y = 20;
// Display results:
Console.WriteLine("My Point:");
Console.WriteLine("x = {0}, y = {1}", myPoint.x, myPoint.y);
Console.ReadKey(true);
}
}
}
Поиграйте с этим. Удалите конструкторы и посмотрите, что получится. Попробуйте использовать конструктор, который инициализирует только одну переменную (я закомментировал одну ... она не скомпилируется). Попробуйте использовать ключевое слово new и без него (я закомментировал некоторые примеры, раскомментируйте их и попробуйте).