Bagikan melalui


Membuat jenis di C#

Tutorial ini mengajarkan Anda tentang membuat jenis di C#. Anda menulis kode dalam jumlah kecil, lalu mengkompilasi dan menjalankan kode tersebut. Tutorial ini berisi serangkaian pelajaran yang mengeksplorasi berbagai jenis dalam C#. Pelajaran ini mengajarkan Anda dasar-dasar bahasa C#.

Petunjuk

Saat blok cuplikan kode menyertakan tombol "Jalankan", tombol tersebut membuka jendela interaktif, atau mengganti kode yang ada di jendela interaktif. Saat cuplikan tidak menyertakan tombol "Jalankan", Anda dapat menyalin kode dan menambahkannya ke jendela interaktif saat ini.

Tutorial sebelumnya bekerja dengan teks dan angka. String dan Numbers adalah jenis sederhana: Masing-masing menyimpan satu nilai tunggal. Ketika program Anda tumbuh lebih besar, Anda perlu bekerja dengan struktur data yang lebih canggih. C# menyediakan berbagai jenis jenis yang dapat Anda tentukan saat Anda memerlukan struktur data dengan lebih banyak bidang, properti, atau perilaku. Mari kita mulai menjelajahi jenis-jenis tersebut.

Tuple

Tuple adalah urutan nilai yang diurutkan dengan panjang tetap. Setiap elemen tuple memiliki jenis dan nama opsional. Kode berikut mendeklarasikan tuple yang mewakili titik 2D. Pilih tombol "Jalankan" untuk menempelkan kode berikut ke jendela interaktif dan jalankan.

var pt = (X: 1, Y: 2);

var slope = (double)pt.Y / (double)pt.X;
Console.WriteLine($"A line from the origin to the point {pt} has a slope of {slope}.");

Petunjuk

Saat Anda menjelajahi C# (atau bahasa pemrograman apa pun), Anda membuat kesalahan saat menulis kode. Pengkompilasi menemukan kesalahan tersebut dan melaporkannya kepada Anda. Saat output berisi pesan kesalahan, lihat lebih dekat kode contoh dan kode di jendela interaktif untuk melihat apa yang harus diperbaiki. Latihan itu membantu Anda mempelajari struktur kode C#.

Anda dapat menetapkan kembali anggota tuple mana pun. Tambahkan kode berikut di jendela interaktif setelah kode yang ada. Tekan "Jalankan" lagi untuk melihat hasilnya.

pt.X = pt.X + 5;
Console.WriteLine($"The point is now at {pt}.");

Anda juga dapat membuat sebuah tuple baru yang merupakan salinan yang dimodifikasi dari yang asli menggunakan ekspresi with. Tambahkan kode berikut setelah kode sudah ada di jendela interaktif dan tekan "Jalankan" untuk melihat hasilnya:

var pt2 = pt with { Y = 10 };
Console.WriteLine($"The point 'pt2' is at {pt2}.");

Tuple pt2 berisi nilai X dari pt (6), dan pt2.Y adalah 10.

Tupel adalah jenis struktural. Dengan kata lain, jenis tuple tidak memiliki nama seperti string atau int. Jenis tuple didefinisikan oleh jumlah anggota, yang disebut sebagai aritas, serta jenis anggota-anggota tersebut. Nama anggota adalah untuk kenyamanan. Anda dapat menetapkan tuple ke tuple yang memiliki aritas dan jenis yang sama meskipun anggota memiliki nama yang berbeda. Anda dapat menambahkan kode berikut setelah kode yang sudah Anda tulis di jendela interaktif dan mencobanya:

var subscript = (A: 0, B: 0);
subscript = pt;
Console.WriteLine(subscript);

Variabel subscript ini memiliki dua anggota, yang keduanya adalah bilangan bulat. subscript dan pt keduanya merupakan contoh dari tipe tuple yang sama: sebuah tuple yang memiliki dua anggota int.

Tuple mudah dibuat: Anda mendeklarasikan beberapa anggota yang diapit tanda kurung. Semua hal berikut mendeklarasikan tuple dengan aritas yang berbeda dan tipe anggota yang berbeda. Tambahkan kode berikut untuk membuat jenis tuple baru:

var namedData = (Name: "Morning observation", Temp: 17, Wind: 4);
var person = (FirstName: "", LastName: "");
var order = (Product: "guitar picks", style: "triangle", quantity: 500, UnitPrice: 0.10m);

Tuple mudah dibuat, tetapi kemampuannya terbatas. Jenis tuple tidak memiliki nama, sehingga Anda tidak dapat menyampaikan makna ke kumpulan nilai. Jenis tuple tidak dapat menambahkan perilaku. C# memiliki jenis jenis lain yang dapat Anda buat ketika jenis Anda menentukan perilaku.

Membuat jenis rekaman

Tuple sangat bagus ketika Anda menginginkan beberapa nilai dalam struktur yang sama. Mereka ringan, dan dapat diinisialisasi saat digunakan. Seiring berjalannya program, Anda mungkin menemukan bahwa Anda menggunakan jenis tuple yang sama di seluruh kode Anda. Jika aplikasi Anda berfungsi di ruang grafik 2D, tuple yang mewakili titik mungkin umum. Setelah menemukannya, Anda dapat mendeklarasikan record jenis yang menyimpan nilai tersebut dan menyediakan lebih banyak kemampuan. Sampel kode berikut menggunakan Main metode untuk mewakili titik masuk untuk program. Dengan demikian, Anda dapat mendeklarasikan record tipe sebelum titik masuk dalam kode. Tekan tombol "Jalankan" pada kode berikut untuk mengganti sampel yang ada dengan kode berikut.

Peringatan

Jangan salin dan tempel. Jendela interaktif harus diatur ulang untuk menjalankan sampel berikut. Jika Anda membuat kesalahan, jendela menjadi tidak responsif, dan Anda perlu memuat ulang halaman untuk melanjutkan.

Kode berikut mendeklarasikan dan menggunakan tipe record untuk mewakili Point, dan kemudian menggunakan struktur Point tersebut dalam metode Main:

public record Point(int X, int Y);

public static void Main()
{
    Point pt = new Point(1, 1);
    var pt2 = pt with { Y = 10 };
    Console.WriteLine($"The two points are {pt} and {pt2}");
}

record Deklarasi adalah baris kode tunggal untuk Point jenis yang menyimpan nilai X dan Y di properti readonly. Anda menggunakan nama Point di mana pun Anda menggunakan jenis tersebut. Jenis yang diberi nama dengan benar, seperti Point, memberikan informasi tentang bagaimana jenis tersebut digunakan. Metode Main ini menunjukkan cara untuk membuat ekspresi with guna menciptakan titik baru yang merupakan salinan yang dimodifikasi dari titik yang ada. Baris pt2 = pt with { Y = 10 } mengatakan "pt2 memiliki nilai yang sama seperti pt kecuali yang Y ditetapkan ke 10." Anda dapat menambahkan sejumlah properti untuk diubah dalam satu with ekspresi.

Deklarasi sebelumnya record adalah satu baris kode yang berakhiran ;, seperti semua pernyataan C#. Anda dapat menambahkan perilaku ke record tipe dengan mendeklarasikan anggota. Anggota rekaman dapat berupa fungsi, atau terdiri dari elemen data tambahan. Anggota jenis berada dalam deklarasi jenis, antara { dan } karakter. Ganti deklarasi rekaman yang Anda buat dengan kode berikut:

public record Point(int X, int Y)
{
    public double Slope() => (double)Y / (double)X;
}

Kemudian, tambahkan kode berikut setelah baris yang berisi ekspresi with pada metode Main.

double slope = pt.Slope();
Console.WriteLine($"The slope of {pt} is {slope}");

Anda menambahkan formalitas pada tuple yang mewakili nilai X dan Y. Anda membuatnya sebagai record yang menentukan jenis bertajuk, dan menyertakan anggota untuk menghitung kemiringan. Jenis record adalah singkatan dari record class: class Jenis yang mencakup perilaku tambahan. Anda dapat memodifikasi tipe Point untuk menjadikannya record struct juga:

public record struct Point(int X, int Y)
{
    public double Slope() => (double) Y / (double) X;
}

record struct adalah tipe struct yang mencakup perilaku tambahan yang ditambahkan ke semua record.

Jenis struktur, kelas, dan antarmuka

Semua tipe bernama di C# adalah tipe class atau struct. Sebuah class adalah jenis referensi. Sebuah struct adalah jenis nilai. Variabel tipe nilai menyimpan isi instans secara langsung di dalam memori. Dengan kata lain, menyimpan record struct Point dua bilangan bulat: X dan Y. Variabel jenis referensi menyimpan referensi, atau penunjuk, ke penyimpanan untuk instans. Dengan kata lain, record class Point menyimpan referensi ke blok memori yang memuat nilai untuk X dan Y.

Dalam praktiknya, itu berarti jenis nilai disalin saat ditetapkan, tetapi salinan instans kelas adalah salinan referensi. Referensi yang disalin mengacu pada instans yang sama dari suatu titik, dengan penyimpanan yang sama pada X dan Y.

Pengubah record menginstruksikan pengkompilasi untuk menulis beberapa anggota untuk Anda. Anda dapat mempelajari selengkapnya dalam artikel tentang jenis catatan di bagian dasar-dasar.

Saat Anda mendeklarasikan record jenis, Anda menyatakan bahwa jenis Anda harus menggunakan serangkaian perilaku default untuk perbandingan kesetaraan, penugasan, dan penyalinan instans jenis tersebut. Rekaman adalah pilihan terbaik saat menyimpan data terkait adalah tanggung jawab utama jenis Anda. Saat Anda menambahkan lebih banyak perilaku, pertimbangkan untuk menggunakan jenis struct atau class tanpa pengubah record.

Anda menggunakan struct jenis untuk jenis nilai ketika perilaku yang lebih canggih diperlukan, tetapi tanggung jawab utama adalah menyimpan nilai. Anda menggunakan class jenis untuk menggunakan idiom berorientasi objek seperti enkapsulasi, warisan, dan polimorfisme.

Anda juga dapat menentukan interface jenis untuk mendeklarasikan kontrak perilaku yang harus diterapkan oleh berbagai jenis. Kedua jenis struct dan class dapat mengimplementasikan antarmuka.

Anda biasanya menggunakan semua jenis ini dalam program dan pustaka yang lebih besar. Setelah menginstal .NET SDK, Anda dapat menjelajahi jenis tersebut menggunakan tutorial pada kelas di bagian dasar-dasar.

Anda menyelesaikan tutorial interaktif "Buat jenis di C#". Anda dapat memilih tautan Cabang dan Perulangan untuk memulai tutorial interaktif berikutnya, atau Anda dapat mengunjungi situs .NET untuk mengunduh .NET SDK, membuat proyek di mesin Anda, dan lanjutkan pengodean. Bagian "Langkah berikutnya" membawa Anda kembali ke tutorial ini.

Anda dapat mempelajari selengkapnya tentang jenis di C# di artikel berikut: