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
    }
}
Peterdk
sumber
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.

Gelas pecah
sumber
39

Anda dapat mencoba sesuatu seperti ini:

public string Name { get; private set; }
public void SetName(string value)
{
    DoSomething();
    this.Name = value;
}
Artur Brutjan
sumber
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.

Femaref
sumber
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;
    }
}
Colin Banbury
sumber
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.

Jeff Yates
sumber