Почему мы используем новое ключевое слово для инициализации структуры, хотя это тип значения - PullRequest
0 голосов
/ 21 ноября 2011

Почему мы используем ключевое слово new для инициализации структуры, хотя это тип значения в C #?

Ответы [ 2 ]

6 голосов
/ 21 ноября 2011

Потому что это ключевое слово, которое в языковой спецификации говорит, что вы используете для инициализации типа значения (с помощью пользовательского конструктора или просто обнуления памяти (использование без параметров new() для типов значений) ), хотя есть крайний случай, когда даже это не нужно). Было бы странно добавить ключевое слово языка различного для той же концепции. Тем более, если учесть дженерики:

public static T Create<T>() where T : new() // not terribly helpful, but....
{
    return new T();
}

Если бы существовали разные ключевые слова для ссылочных типов и типов значений, это было бы очень запутанным, скажем, для var zero = Create<int>(). Опять же, пример глупый, но в этом есть смысл.

4 голосов
/ 21 ноября 2011

Когда вы создаете объект структуры с помощью оператора new, он создается и вызывается соответствующий конструктор.

Но есть исключение. Структуры могут быть созданы без использования оператора new. В таком случае нет вызова конструктора, что делает распределение более эффективным. Однако поля останутся неназначенными, и объект нельзя будет использовать, пока не будут инициализированы все поля.

Например:

public struct CoOrds
{
    public int x, y;

    public CoOrds(int p1, int p2)
    {
        x = p1;
        y = p2;
    }
}

 // Declare an 
 CoOrds coords1;

 // Initialize:
 coords1.x = 10;
 coords1.y = 20;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...