C # properti: bagaimana menggunakan properti set kustom tanpa bidang pribadi?


96

Aku ingin melakukan ini:

public Name
{
    get;
    set
    {
        dosomething();
        ??? = value
    }
}

Apakah mungkin menggunakan bidang pribadi yang dibuat secara otomatis?
Atau apakah saya harus menerapkannya dengan cara ini:

private string name;
public string Name
{
    get
    {
        return name;
    }
    set
    {
        dosomething();
        name = value
    }
}

2
Ada banyak diskusi bagus tentang ini pada pertanyaan SO ini: stackoverflow.com/questions/1277018/…
David Hall

Jawaban:


104

Setelah Anda ingin melakukan kustom apa pun di getter atau setter, Anda tidak dapat lagi menggunakan properti otomatis.


39

Anda dapat mencoba sesuatu seperti ini:

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}

6
+1 Menurut saya, jawaban ini menegur jawaban yang diterima. Ini menggunakan properti otomatis. Ini secara eksplisit menetapkan penyetel ke pribadi. Ini adalah hal yang baik karena memungkinkan pengguna akhir atau pengembang mengetahui kemungkinan lebih banyak yang terjadi di balik metode penyetel.
ooXei1sh

Apa perbedaan antara ini dan tidak memiliki set sama sekali?
Sidhin S Thomas

3
@SidhinSThomas yang tidak memberikan private setakan mencegah properti disetel oleh anggota kelasnya; itu akan menjadi hanya-baca. Anda hanya dapat menyetel datanya di konstruktor.
Bondolin

15

Ini tidak mungkin. Baik properti yang diterapkan secara otomatis atau kode khusus.


11

Mulai C # 7, Anda dapat menggunakan definisi isi ekspresi untuk properti getdan setpengakses.

Lihat selengkapnya di sini

private string _name;

public string Name
{
    get => _name;
    set
    {
        DoSomething();
        _name = value;
    }
}

4
Masih menggunakan private field sekalipun. Tidak terlalu membantu OP.
TSmith

Meskipun ini berfungsi, seperti yang dikatakan @TSmith, itu bukan yang diinginkan OP.
M. Ruiz

7

Anda diharuskan menerapkannya sepenuhnya sesuai skenario Anda. Keduanya getdan setharus diterapkan secara otomatis atau diterapkan sepenuhnya bersama-sama, bukan kombinasi keduanya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.