Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
новый оператор —
Оператор new создает экземпляр типа. Ключевое слово new можно также использовать как модификатор объявления члена или ограничение универсального типа.
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
Вызов конструктора
Чтобы создать новый экземпляр типа, вызовите один из конструкторов этого типа с помощью new оператора:
var dict = new Dictionary<string, int>();
dict["first"] = 10;
dict["second"] = 20;
dict["third"] = 30;
Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30
Для создания экземпляра объекта и его инициализации в одном операторе можно использовать инициализатор объекта или элементов с оператором new, как в следующем примере:
var dict = new Dictionary<string, int>
{
["first"] = 10,
["second"] = 20,
["third"] = 30
};
Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30
Типизированный целевой объект new
Выражения вызова конструктора являются целевыми типами. То есть, если известен целевой тип выражения, вы можете опустить имя типа, как показано в следующем примере:
List<int> xs = new();
List<int> ys = new(capacity: 10_000);
List<int> zs = new() { Capacity = 20_000 };
Dictionary<int, List<int>> lookup = new()
{
[1] = new() { 1, 2, 3 },
[2] = new() { 5, 8, 3 },
[5] = new() { 1, 0, 4 }
};
Как показано в предыдущем примере, всегда используйте скобки в целевом типизированном new выражении.
Если целевой тип выражения new неизвестен (например, если вы используете ключевое слово var), нужно указать имя типа.
создание массива
С помощью оператора new можно также создать экземпляр массива, как показано в следующем примере:
var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30
Чтобы создать экземпляр массива и заполнить его элементами в одном операторе, используйте синтаксис инициализации массива. В следующем примере показаны различные способы сделать это:
var a = new int[3] { 10, 20, 30 };
var b = new int[] { 10, 20, 30 };
var c = new[] { 10, 20, 30 };
Console.WriteLine(c.GetType()); // output: System.Int32[]
Дополнительные сведения см. в руководстве по работе с массивами.
Создание экземпляров анонимных типов
Чтобы создать экземпляр анонимного типа, используйте оператор new и синтаксис инициализации объекта:
var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!
Уничтожение экземпляров типа
Вам не нужно уничтожать ранее созданные экземпляры типов. Система автоматически уничтожает экземпляры ссылочных и типов значений. Система уничтожает экземпляры типов значений сразу после уничтожения контекста, содержащего их. Сборщик мусора уничтожает экземпляры ссылочных типов в некоторое время после удаления последней ссылки.
Для экземпляров типов, содержащих неуправляемые ресурсы, например детерминированный детерминированный очистка, чтобы обеспечить освобождение ресурсов как можно скорее. Дополнительные сведения см. в справочнике System.IDisposable по API и статье инструкцииusing.
Возможность перегрузки оператора
Определяемый пользователем тип не может перегружать new оператор.
Спецификация языка C#
Дополнительные сведения см. в разделе Оператор newспецификация языка C#.
Подробные сведения о выражении new с целевым типом см. в примечании к предлагаемой функции.