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.