webForumDet fria alternativet

egenskap + konstruktor

.NETur .NET

5 svar · 617 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Vilken är att föredra av dessa två och varför?

alt. 1

public class con
{
    private string _foo;
    public string Foo
    {
        get
        {
            if (_foo.Length == 0)
                return "bar";
            else
                return _foo;
        }
        set { _foo = value; }
    }
}

alt. 2

public class con
{
    private string _foo;
    public string Foo
    {
        get{ return _foo; }
        set { _foo = value; }
    }

    public con()
    {
        _foo = "bar";
    }
}
Medlem sedan jan. 20022 440 inlägg
#2

Om jag har förstått det hela rätt så är alternativ 2 "mera rätt" fast det beror väl på vad du ska använda det till.

Du ska ju redan ha sett till att det som skickas in i klassen är av rätt typ och har ett värde..

Medlem sedan jan. 20023 327 inlägg
#3

Alternativ 2.

När du deklararerar _foo utan att tilldela ett värde så gör CLR:en följande åt dig (under the hood): private string _foo; blir private string _foo = "". Med andra ord så returneras en tom sträng när du skriver con.Foo och du inte tilldelat något värde till instansvariabeln.

Medlem sedan maj 20011 312 inlägg
#4

Varför inte göra så här istället?

public class con
{
    private string _foo = "bar";
    public string Foo
    {
        get{ return _foo; }
        set { _foo = value; }
    }
}
Medlem sedan jan. 20023 327 inlägg
#5

Helt rätt (y)

Kollade inte tillräckligt noggrant på koden.

Medlem sedan juni 20003 076 inlägg
#6

Lukaspojken skrev:

Varför inte göra så här istället?

Ja, varför inte! Tanken slog mig aldrig! :bire

135 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)