Rangkaian Konstruktor dengan this
Gunakan kembali inisialisasi di berbagai konstruktor.
Rangkaian Konstruktor dengan this adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Mengapa Merangkai Konstruktor?
Ketika beberapa konstruktor berbagi logika penyiapan, Anda dapat merangkainya agar salah satunya memanggil yang lain. Ini menghindari pengulangan kode dan menjaga inisialisasi di satu tempat.
using System;
class Box
{
public int Width;
public int Height;
public Box(int width, int height)
{
Width = width;
Height = height;
}
public Box() : this(1, 1) { }
}
class Program
{
static void Main()
{
var def = new Box();
Console.WriteLine(def.Width + "x" + def.Height);
}
}Sintaks : this(...)
Perangkaian menggunakan : this(args) setelah tanda tangan konstruktor. Konstruktor yang dituju dijalankan terlebih dahulu, kemudian badan konstruktor saat ini dijalankan.
using System;
class Person
{
public string Name;
public int Age;
public Person(string name, int age)
{
Name = name;
Age = age;
Console.WriteLine("Full constructor ran");
}
public Person(string name) : this(name, 0)
{
Console.WriteLine("Name-only constructor ran");
}
}
class Program
{
static void Main()
{
var p = new Person("Sam");
Console.WriteLine(p.Name + ", " + p.Age);
}
}Urutan Eksekusi
Konstruktor yang dirangkai dijalankan sebelum badan konstruktor pemanggil. Ini menjamin penyiapan dasar dilakukan terlebih dahulu.
using System;
class Step
{
public Step(int n)
{
Console.WriteLine("Init with " + n);
}
public Step() : this(0)
{
Console.WriteLine("Then default body");
}
}
class Program
{
static void Main()
{
var s = new Step();
}
}Satu Sumber Kebenaran
Arahkan semua konstruktor ke satu konstruktor "utama" yang berisi logika sebenarnya. Konstruktor lainnya hanya menyediakan nilai bawaan dan merangkai pemanggilan ke konstruktor tersebut.
using System;
class Connection
{
public string Host;
public int Port;
public Connection(string host, int port)
{
Host = host;
Port = port;
}
public Connection(string host) : this(host, 8080) { }
public Connection() : this("localhost", 8080) { }
}
class Program
{
static void Main()
{
var c = new Connection("example.com");
Console.WriteLine(c.Host + ":" + c.Port);
}
}Perangkaian dengan Nilai Bawaan
Perangkaian merupakan cara yang rapi untuk menyatakan nilai bawaan berlapis: setiap konstruktor yang lebih singkat mengisi satu nilai bawaan tambahan lalu mendelegasikan pemanggilan.
using System;
class Coffee
{
public string Size;
public bool Milk;
public int Sugar;
public Coffee(string size, bool milk, int sugar)
{
Size = size;
Milk = milk;
Sugar = sugar;
}
public Coffee(string size, bool milk) : this(size, milk, 0) { }
public Coffee(string size) : this(size, false) { }
}
class Program
{
static void Main()
{
var c = new Coffee("large");
Console.WriteLine(c.Size + ", milk=" + c.Milk + ", sugar=" + c.Sugar);
}
}Validasi pada Konstruktor Tujuan
Karena setiap konstruktor diarahkan melalui konstruktor utama, validasi yang ditulis di sana melindungi semua jalur pembuatan objek.
using System;
class Rect
{
public int W;
public int H;
public Rect(int w, int h)
{
if (w <= 0 || h <= 0)
throw new ArgumentException("Dimensions must be positive");
W = w;
H = h;
}
public Rect(int side) : this(side, side) { }
}
class Program
{
static void Main()
{
var square = new Rect(5);
Console.WriteLine(square.W + "x" + square.H);
}
}Perangkaian vs Parameter Bawaan
Parameter bawaan dapat menggantikan banyak konstruktor dengan parameter berbeda, tetapi perangkaian lebih jelas ketika setiap konstruktor memerlukan logika yang sedikit berbeda di badannya.
using System;
class Logger
{
public string Prefix;
public bool Verbose;
public Logger(string prefix, bool verbose)
{
Prefix = prefix;
Verbose = verbose;
}
public Logger(string prefix) : this(prefix, false)
{
Console.WriteLine("Created quiet logger");
}
}
class Program
{
static void Main()
{
var log = new Logger("APP");
Console.WriteLine(log.Prefix + " verbose=" + log.Verbose);
}
}Badan Kosong Itu Umum
Konstruktor yang dirangkai sering memiliki badan { } yang kosong karena semua pekerjaan berlangsung di konstruktor tujuan.
using System;
class Vector
{
public double X, Y, Z;
public Vector(double x, double y, double z)
{
X = x; Y = y; Z = z;
}
public Vector(double v) : this(v, v, v) { }
}
class Program
{
static void Main()
{
var v = new Vector(2);
Console.WriteLine(v.X + "," + v.Y + "," + v.Z);
}
}Menghindari Siklus
Konstruktor tidak boleh dirangkai dalam satu putaran (A memanggil B, B memanggil A). Kompilator menolak rangkaian : this(...) yang melingkar.
using System;
class Safe
{
public int A, B;
public Safe(int a, int b)
{
A = a;
B = b;
}
public Safe(int a) : this(a, 0) { } // chains one direction only
}
class Program
{
static void Main()
{
var s = new Safe(7);
Console.WriteLine(s.A + ", " + s.B);
}
}Menggabungkan dengan this.field
Anda dapat merangkai konstruktor dan tetap menggunakan this. di badannya untuk penyiapan tambahan setelah konstruktor tujuan selesai dijalankan.
using System;
class Account
{
public string Owner;
public decimal Balance;
public bool Active;
public Account(string owner, decimal balance)
{
this.Owner = owner;
this.Balance = balance;
}
public Account(string owner) : this(owner, 0m)
{
this.Active = true;
}
}
class Program
{
static void Main()
{
var a = new Account("Rin");
Console.WriteLine(a.Owner + " active=" + a.Active);
}
}Menyatukannya
Perangkaian menjaga kelas tetap DRY: satu konstruktor memvalidasi dan menetapkan nilai; konstruktor lainnya menyediakan jalan pintas yang praktis.
using System;
class Pizza
{
public string Size;
public int Toppings;
public Pizza(string size, int toppings)
{
if (toppings < 0) throw new ArgumentException("toppings");
Size = size;
Toppings = toppings;
}
public Pizza(string size) : this(size, 0) { }
public Pizza() : this("medium") { }
}
class Program
{
static void Main()
{
var p = new Pizza();
Console.WriteLine(p.Size + " with " + p.Toppings + " toppings");
}
}Pemeriksaan Singkat
Uji pemahaman Anda tentang perangkaian konstruktor.
Ringkasan
Perangkaian konstruktor menggunakan : this(args) untuk memanggil konstruktor lain dalam kelas yang sama. Konstruktor tujuan dijalankan terlebih dahulu, kemudian badan konstruktor saat ini. Arahkan setiap konstruktor melalui satu konstruktor utama untuk memusatkan validasi dan menghindari pengulangan penyiapan. Rangkaian melingkar tidak diizinkan.
using System;
class Demo
{
public int X, Y;
public Demo(int x, int y) { X = x; Y = y; }
public Demo(int both) : this(both, both) { }
}
class Program
{
static void Main()
{
var d = new Demo(4);
Console.WriteLine(d.X + "," + d.Y);
}
}Pertanyaan yang Sering Diajukan
Apakah pelajaran “Rangkaian Konstruktor dengan this” gratis?
Ya — teks lengkap “Rangkaian Konstruktor dengan this” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Rangkaian Konstruktor dengan this”?
Gunakan kembali inisialisasi di berbagai konstruktor. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Rangkaian Konstruktor dengan this” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendefinisikan Konstruktor
- Rangkaian Konstruktor dengan this
- Inisialisasi Objek dan Koleksi
- Konstruktor Statis