C# struktur
struktur C#
Dalam tutorial ini, Anda akan belajar tentang struct dalam C# dengan bantuan contoh.
Struktur (struktur) seperti kelas dalam C# yang digunakan untuk menyimpan data. Namun, tidak seperti kelas, struct adalah tipe nilai.
Misalkan kita ingin menyimpan nama dan umur seseorang. Kita dapat membuat dua variabel:name dan usia dan menyimpan nilai.
Namun, misalkan kita ingin menyimpan informasi yang sama dari banyak orang.
Dalam hal ini, membuat variabel untuk satu orang mungkin merupakan tugas yang membosankan. Untuk mengatasinya kita bisa membuat struct yang menyimpan name dan usia . Sekarang, struct ini bisa digunakan untuk semua orang.
Mendefinisikan struct di C#
Dalam C#, kami menggunakan struct
kata kunci untuk mendefinisikan sebuah struct. Misalnya,
struct Employee {
public int id;
}
Di sini, id adalah bidang di dalam struct. Sebuah struct juga dapat menyertakan metode, pengindeks, dll.
Deklarasikan variabel struct
Sebelum kita menggunakan struct, pertama-tama kita perlu membuat variabel struct. Kami menggunakan nama struct dengan variabel untuk mendeklarasikan variabel struct. Misalnya,
struct Employee {
public int id;
}
...
// declare emp of struct Employee
Employee emp;
Pada contoh di atas, kita telah membuat sebuah struct bernama Karyawan . Di sini, kami telah mendeklarasikan variabel emp dari struct Karyawan .
Akses struct C#
Kami menggunakan variabel struct bersama dengan .
operator untuk mengakses anggota suatu struct. Misalnya,
struct Employee {
public int id;
}
...
// declare emp of struct Employee
Employee emp;
// access member of struct
emp.id = 1;
Di sini, kami telah menggunakan variabel emp dari sebuah struct Karyawan dengan .
operator untuk mengakses anggota Karyawan .
emp.id = 1;
Ini mengakses id bidang struct Karyawan .
Catatan :Tipe data primitif seperti int
, bool
, float
adalah struct yang telah ditentukan sebelumnya dalam C#.
Contoh:Struktur C#
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public int id;
public void getId(int id) {
Console.WriteLine("Employee Id: " + id);
}
}
class Program {
static void Main(string[] args) {
// declare emp of struct Employee
Employee emp;
// accesses and sets struct field
emp.id = 1;
// accesses struct methods
emp.getId(emp.id);
Console.ReadLine();
}
}
}
Keluaran
Employee Id: 1
Pada program di atas, kita telah membuat sebuah struct bernama Karyawan . Ini berisi bidang id dan metode getId() .
Di dalam Program kelas, kami telah mendeklarasikan variabel emp dari struct Karyawan . Kami kemudian menggunakan emp variabel untuk mengakses bidang dan metode kelas.
Catatan :Kami juga dapat membuat instance struct menggunakan new
kata kunci. Misalnya,
Employee emp = new Employee();
Di sini, baris ini memanggil konstruktor tanpa parameter dari struct dan menginisialisasi semua anggota dengan nilai default.
Konstruktor di C# struct
Dalam C#, sebuah struct juga dapat menyertakan konstruktor. Misalnya,
struct Employee {
public int id;
// constructor
public Employee(int employeeId) {
id = employeeId
}
}
Di sini, kami telah membuat konstruktor berparameter Employee()
dengan parameter employeeId .
Catatan :Kami tidak dapat membuat konstruktor tanpa parameter di C# versi 9.0 atau lebih rendah.
Contoh:Konstruktor di C# struct
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public int id;
public string name;
// parameterized constructor
public Employee(int employeeId, string employeeName) {
id = employeeId;
name = employeeName;
}
}
class Program {
static void Main(string[] args) {
// calls constructor of struct
Employee emp = new Employee(1, "Brian");
Console.WriteLine("Employee Name: " + emp.name);
Console.WriteLine("Employee Id: " + emp.id);
Console.ReadLine();
}
}
}
Keluaran
Employee Name: Brian
Employee Id: 1
Pada contoh di atas, kita telah membuat konstruktor berparameter di dalam Karyawan struktur. Di dalam konstruktor, kami telah menetapkan nilai bidang:id dan nama .
Perhatikan barisnya,
Employee emp = new Employee(1, "Brian");
Seperti di kelas C#, kita menggunakan new
kata kunci untuk memanggil konstruktor. Di sini, 1 dan "Brian" adalah argumen yang diteruskan ke konstruktor, di mana mereka ditugaskan ke parameter employeeID dan namakaryawan masing-masing."
Catatan :Kita harus menetapkan nilai untuk setiap bidang struct di dalam konstruktor berparameter. Misalnya,
// error code
public Employee(int employeeID, employeeName) {
id = employeeID;
}
Di sini, kami belum menetapkan nilai untuk name bidang. Jadi kode tersebut akan menghasilkan kesalahan.
Properti di C# struct
Kita juga dapat menggunakan properti di dalam struct C#. Misalnya,
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public int id;
// creates property
public int Id {
// returns id field
get {
return id;
}
// sets id field
set {
id = value;
}
}
}
class Program {
static void Main(string[] args) {
// calls the constructor of struct
Employee emp = new Employee();
emp.Id = 1;
Console.WriteLine("Employee Id: " + emp.Id);
Console.ReadLine();
}
}
}
Keluaran
Employee Id: 1
Dalam contoh di atas, kita memiliki Id properti di dalam Karyawan struktur.
dapatkan metode mengembalikan id bidang dan set metode memberikan nilai ke id lapangan.
Perbedaan antara class dan struct dalam C#
Di kelas C# dan struct terlihat serupa. Namun, ada beberapa perbedaan di antara mereka.
Kelas adalah tipe referensi sedangkan struct adalah tipe nilai. Misalnya,
using System;
namespace CsharpStruct {
// defining class
class Employee {
public string name;
}
class Program {
static void Main(string[] args) {
Employee emp1 = new Employee();
emp1.name = "John";
// assign emp1 to emp2
Employee emp2 = emp1;
emp2.name = "Ed";
Console.WriteLine("Employee1 name: " + emp1.name);
Console.ReadLine();
}
}
}
Keluaran
Employee1 name: Ed
Dalam contoh di atas, kami telah menetapkan nilai emp1 ke emp2 . emp2 objek merujuk ke objek yang sama dengan emp1 . Jadi, pembaruan di emp2 memperbarui nilai emp1 secara otomatis.
Inilah sebabnya mengapa kelas adalah tipe referensi .
Berlawanan dengan kelas, ketika kita menetapkan satu variabel struct ke yang lain, nilai struct akan disalin ke variabel yang ditugaskan. Jadi memperbarui satu variabel struct tidak memengaruhi yang lain. Misalnya,
using System;
namespace CsharpStruct {
// defining struct
struct Employee {
public string name;
}
class Program {
static void Main(string[] args) {
Employee emp1 = new Employee();
emp1.name = "John";
// assign emp1 to emp2
Employee emp2 = emp1;
emp2.name = "Ed";
Console.WriteLine("Employee1 name: " + emp1.name);
Console.ReadLine();
}
}
}
Keluaran
Employee1 name: John
Saat kita menetapkan nilai emp1 ke emp2 , nilai baru emp2 dibuat. Di sini, nilai emp1 disalin ke emp2 . Jadi, ubah emp2 tidak mempengaruhi emp1 .
Inilah sebabnya mengapa struct adalah tipe nilai .
Selain itu, pewarisan tidak dimungkinkan dalam struct padahal itu adalah fitur penting dari kelas C#.