Výchozí hodnota majetku

hlasů
2

Máte-li objekt, jako je tento:

public class Foo
{
    private int _id;

    public int id
    {
        get { return _id; }
        set { _id = value; }
    }

    private string _name;

    public string name
    {
        get { return _name; }
        set { _name = value; }
    }
}

A chcete inicializovat id až -1 a jména k String.Empty co je nejlepší praxe? (a proč)

dělat:

private int _id = -1

Nebo

Nastavení _id = -1 a name = String.Empty v konstruktoru?

Položena 26/02/2009 v 15:56
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
7

Jedná se spíše o stylu otázka, než cokoliv jiného. Existuje jen málo případů, kdy se jedná o funkční problém

  1. Když máte mnoho konstruktérů nichž všechny inicializaci pole na stejnou hodnotu. V tomto okamžiku máte redundantní kód a měl by buď refaktorovat své konstruktéry nebo použití v terénu inicializátory.
  2. Nepoužívejte pole inicializátor, pokud závisí na hodnotě jiné oblasti ve stejné hierarchii tříd. V něm není žádné částečných tříd výsledek je předvídatelný, ale přesto může hodit lidi smyčce ..
Odpovězeno 26/02/2009 v 15:59
zdroj uživatelem

hlasů
2

Přístup pole stručné, který dostává hodně hlasů, ale moje preference (pro jednoduché vlastnosti), by bylo použít automatické vlastnosti, v takovém případě budete nuceni použít konstruktor:

    public Foo() {
        Id = -1;
        Name = "";
    }
    public int Id {get;set;}
    public string Name {get;set;}

Můžete také zvážit použití [DefaultValue(-1)]etc, který pomáhá návrhářům a Serializézy, ale to nebude mít vliv na počáteční hodnotu auto realizován majetku (nebo v pravidelných majetku) - to je jen další info.

Odpovězeno 26/02/2009 v 16:00
zdroj uživatelem

hlasů
2

závisí na tom, kdy chcete, aby se nastavit ...

private int _id = -1

inicializuje _id před konstruktor je volán.

Odpovězeno 26/02/2009 v 15:59
zdroj uživatelem

hlasů
0

Je to hlavně otázka styl preference. I obvykle přiřadit jim v konstruktoru, protože se jedná o rozumný místem pro všechna data a postupů, které se konají, když je objekt instance.

Odpovězeno 26/02/2009 v 16:05
zdroj uživatelem

hlasů
0

Inline inicializace se přidává do horní části montážního závodu u C # kompilátor, takže tam je opravdu žádný rozdíl. Osobně dávám přednost vždy přidáním konstruktérů, i když se jedná pouze o výchozí konstruktor.

Odpovězeno 26/02/2009 v 16:00
zdroj uživatelem

hlasů
0

Čaroděj CLR mi mohl napravit, ale věřím, že tyto dva přístupy jsou funkčně totožné, ale mohl dělat argument, že stanovení výchozí hodnoty v konstruktoru je jasnější a samozřejmé, ale také trochu Messier.

Odpovězeno 26/02/2009 v 16:00
zdroj uživatelem

hlasů
0

Nastavením „inline“ namísto používání konstruktoru Zdá se mi, uvést záměr lépe. Funkčně jsou stejné.

Odpovězeno 26/02/2009 v 15:59
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more