Bagikan melalui


operator baru - Operator new membuat instans baru jenis

Operator new membuat instans jenis baru. Anda juga dapat menggunakan kata kunci new sebagai pengubah deklarasi anggota atau batasan tipe generik.

Panggilan konstruktor

Untuk membuat instans baru dari suatu tipe, Anda biasanya memanggil salah satu konstruktor dari tipe tersebut menggunakan operatornew:

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

Anda dapat menggunakan penginisialisasi objek atau koleksi dengan operator new untuk membuat instans dan menginisialisasi objek dalam satu pernyataan, seperti yang ditunjukkan contoh berikut:

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

Berjenis target new

Ekspresi pemanggilan konstruktor dititik target. Artinya, jika tipe target ekspresi diketahui, Anda bisa menghilangkan nama tipe, seperti yang diperlihatkan contoh berikut:

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

Seperti yang diperlihatkan contoh sebelumnya, Anda selalu menggunakan tanda kurung dalam ekspresi new yang sesuai jenis target.

Jika tipe target ekspresi new tidak diketahui (misalnya, saat Anda menggunakan kata kunci var), Anda harus menentukan nama tipe.

Pembuatan array

Anda juga menggunakan operator new untuk membuat instans array, seperti yang ditunjukkan contoh berikut:

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

Gunakan sintaks inisialisasi array untuk membuat instance array dan mengisinya dengan elemen dalam satu pernyataan. Contoh berikut ini menunjukkan berbagai cara bagaimana Anda dapat melakukannya:

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[]

Untuk informasi selengkapnya tentang array, lihat Array.

Instansiasi jenis anonim

Untuk membuat instans dari jenis anonim, gunakan sintaks operator new dan penginisialisasi objek:

var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!

Penghancuran jenis instans

Anda tidak perlu menghancurkan instans tipe yang dibuat sebelumnya. Instans dari kedua tipe referensi dan nilai akan dimusnahkan secara otomatis. Instans tipe nilai dihancurkan segera setelah konteks yang memuatnya dihancurkan. Instans dari tipe referensi dihancurkan oleh pengumpul sampah pada waktu yang tidak ditentukan setelah referensi terakhir untuknya dihapus.

Untuk instans tipe yang berisi sumber daya yang tidak dikelola, misalnya, pegangan file, disarankan untuk menggunakan pembersihan deterministik untuk memastikan bahwa sumber daya yang dikandungnya dilepaskan sesegera mungkin. Untuk informasi selengkapnya, lihat System.IDisposable referensi API dan using artikel pernyataan .

Kelebihan beban operator

Jenis yang ditentukan pengguna tidak dapat membebani new operator secara berlebihan.

Spesifikasi bahasa C#

Untuk informasi lebih lanjut, lihatlah bagian Operator sizeof dari Spesifikasi bahasa C#.

Untuk informasi selengkapnya tentang ekspresi berjenis target new, lihat catatan proposal fitur.

Lihat juga