C # özellikleri: özel alan olmadan özel küme özelliği nasıl kullanılır?


96

Bunu yapmak istiyorum:

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

Otomatik oluşturulan özel alanı kullanmak mümkün mü?
Yoksa bu şekilde uygulamam gerekli mi:

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

2
Bu SO sorusunda bununla ilgili pek çok iyi tartışma var: stackoverflow.com/questions/1277018/…
David Hall

Yanıtlar:


104

Alıcıda veya ayarlayıcıda özel bir şey yapmak istediğinizde, artık otomatik özellikleri kullanamazsınız.


39

Bunun gibi bir şey deneyebilirsiniz:

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

6
+1 Bana göre bu cevap, kabul edilen cevabı azarlıyor. Otomatik özellikleri kullanıyor. Açıkça ayarlayıcıyı özel olarak ayarlar. Bu iyi bir şeydir, çünkü son kullanıcının veya geliştiricinin, ayarlayıcı yönteminin arkasında muhtemelen daha fazla şey olduğunu bilmesini sağlar.
ooXei1sh

Bunun ve hiç ayarlanmamış olması arasındaki fark nedir?
Sidhin S Thomas

3
@SidhinSThomas'ın a sağlamaması private set, mülkün sınıfının üyeleri tarafından ayarlanmasını engeller; kesinlikle salt okunur olacaktır. Verilerini yalnızca yapıcıda ayarlayabileceksiniz.
Bondolin

15

Bu mümkün değil. Otomatik olarak uygulanan özellikler veya özel kod.


11

C # 7'den itibaren, özellik getve seterişimciler için ifade gövdesi tanımlarını kullanabilirsiniz .

Burada daha fazlasını görün

private string _name;

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

4
Yine de özel bir alan kullanıyorum. OP'ye gerçekten yardımcı olmuyor.
TSmith

Bu işe yararken, @TSmith'in dediği gibi, OP'nin istediği bu değil.
M. Ruiz

7

Senaryonuza göre tam olarak uygulamanız gerekir. Hem getve setolmalı ya da otomatik olarak uygulanır ya da tam olarak, birlikte iki değil bir arada uygulamaya.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.