Akademi C# · Pelajaran

Menangkap Parameter dalam Ahli

Gunakan parameter pembina utama di seluruh jenis.

Pelajaran 2 daripada 413 langkah

Menangkap Parameter dalam Ahli ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Menggunakan Parameter dalam Ahli

Kekuatan pembina utama datang daripada penggunaan parameternya dalam ahli: kaedah, sifat dan penginisialisasi medan. Pengkompil mengatur storan mengikut keperluan.

using System;

class Multiplier(int factor) {
    public int Apply(int n) => n * factor;
}

Console.WriteLine(new Multiplier(3).Apply(5)); // 15

Tangkap berbanding Hanya Penginisialisasi

Jika parameter hanya digunakan dalam penginisialisasi medan atau sifat, storan tambahan tidak diperlukan. Jika parameter digunakan dalam kaedah, pengkompil menangkapnya ke dalam medan tersembunyi.

using System;

class A(int x) {
    public int Stored = x;     // initializer only
}
class B(int x) {
    public int Get() => x;     // captured into a field
}

Console.WriteLine(new A(7).Stored); // 7
Console.WriteLine(new B(9).Get());  // 9

Parameter Boleh Diubah

Parameter pembina utama berkelakuan seperti parameter biasa: parameter tersebut boleh diubah dalam tika, melainkan anda menganggapnya sebagai baca sahaja. Perubahan pada parameter itu mengubah medan yang ditangkap.

using System;

class Toggle(bool on) {
    public void Flip() => on = !on;
    public bool State => on;
}

var t = new Toggle(false);
t.Flip();
Console.WriteLine(t.State); // True

Mendedahkan sebagai Sifat Baca Sahaja

Corak yang biasa digunakan ialah mendedahkan parameter melalui sifat yang hanya mempunyai get, lalu memberikan antara muka awam yang kemas sambil mengekalkan parameter itu di dalam kelas.

using System;

class User(string email) {
    public string Email { get; } = email;
}

Console.WriteLine(new User("a@b.com").Email); // a@b.com

Sifat Terhitung daripada Parameter

Parameter sememangnya sesuai digunakan dalam sifat terhitung yang menggunakan badan ungkapan.

using System;

class Money(decimal amount, string currency) {
    public string Display => amount.ToString("0.00") + " " + currency;
}

Console.WriteLine(new Money(9.5m, "USD").Display); // 9.50 USD

Parameter dalam Pelbagai Kaedah

Parameter yang sama dan ditangkap boleh dikongsi oleh banyak kaedah, seperti medan peribadi yang dimulakan semasa pembinaan.

using System;

class Range2(int lo, int hi) {
    public bool Contains(int n) => n >= lo && n <= hi;
    public int Clamp(int n) => Math.Max(lo, Math.Min(hi, n));
}

var r = new Range2(0, 10);
Console.WriteLine(r.Contains(5)); // True
Console.WriteLine(r.Clamp(15));   // 10

Menangkap Jenis Rujukan

Parameter jenis rujukan yang ditangkap membolehkan anda menyimpan kebergantungan yang disuntik dan memanggilnya daripada mana-mana kaedah.

using System;
using System.Collections.Generic;

class Repo(List<string> store) {
    public void Add(string item) => store.Add(item);
    public int Count => store.Count;
}

var list = new List<string>();
var repo = new Repo(list);
repo.Add("x");
Console.WriteLine(repo.Count); // 1

Mengelakkan Penyimpanan Berganda Tidak Sengaja

Jika anda menetapkan parameter kepada medan dan menggunakan parameter itu dalam kaedah, anda mungkin menyimpan nilai tersebut dua kali. Pilih satu pendekatan demi kejelasan.

using System;

class Clean(int x) {
    // expose once via property, reference property in methods
    public int Value { get; } = x;
    public int Doubled() => Value * 2;
}

Console.WriteLine(new Clean(4).Doubled()); // 8

Parameter dalam Lambda

Parameter boleh ditangkap oleh lambda yang ditakrifkan dalam kelas, sama seperti medan.

using System;
using System.Collections.Generic;
using System.Linq;

class Filter(int threshold) {
    public IEnumerable<int> KeepAbove(IEnumerable<int> xs) =>
        xs.Where(n => n > threshold);
}

var f = new Filter(3);
Console.WriteLine(string.Join(",", f.KeepAbove(new[]{1,2,3,4,5}))); // 4,5

Jangka Hayat Skop

Parameter yang ditangkap hidup selama objek itu wujud. Ia pada dasarnya ialah keadaan tika, jadi jangan anggap ia ditetapkan semula antara panggilan kaedah.

using System;

class Accumulator(int seed) {
    private int total = seed;
    public int Add(int n) { total += n; return total; }
}

var a = new Accumulator(100);
Console.WriteLine(a.Add(1)); // 101
Console.WriteLine(a.Add(1)); // 102

Menggabungkan Kesemuanya

Perkhidmatan ini menangkap dua kebergantungan dan menggunakannya merentas kaedah, menunjukkan bentuk lazim dalam dunia sebenar.

using System;

class PriceService(decimal taxRate, string currency) {
    public decimal WithTax(decimal net) => net * (1 + taxRate);
    public string Format(decimal v) => v.ToString("0.00") + " " + currency;
}

var s = new PriceService(0.2m, "EUR");
Console.WriteLine(s.Format(s.WithTax(100m))); // 120.00 EUR

Semakan Pantas

Sahkan cara parameter pembina utama disimpan.

Imbas Kembali

Anda telah mempelajari cara parameter pembina utama digunakan dalam ahli.

  • Apabila digunakan dalam kaedah, parameter ditangkap ke dalam medan tersembunyi.
  • Apabila digunakan hanya dalam pemula, tiada storan tambahan diperlukan.
  • Dedahkan parameter tersebut melalui sifat yang hanya boleh dibaca untuk permukaan yang kemas.
  • Parameter tersebut berkelakuan sebagai keadaan tika sepanjang hayat objek.
Percuma untuk bermula

Pelajari C# dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
93
Pelajaran
346

Soalan Lazim

Adakah pelajaran “Menangkap Parameter dalam Ahli” percuma?

Ya — teks penuh “Menangkap Parameter dalam Ahli” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Menangkap Parameter dalam Ahli”?

Gunakan parameter pembina utama di seluruh jenis. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Menangkap Parameter dalam Ahli” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?

Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pembina Utama pada Kelas
  2. Menangkap Parameter dalam Ahli
  3. Pembina Utama dengan Struct
  4. Menggabungkan dengan Sifat dan Jenis Asas
← Kembali ke Akademi C#