4 Stimmen

Wie man einen Wert aus einer anderen Klasse setzt

Es wird gesagt, dass die Eigenschaft nicht nur "Set" sein sollte (Code-Analyse-Regel CA1044), sondern auch "Get" sein sollte. Was soll ich tun, wenn ich einen Wert auf eine Variable aus einer anderen Klasse setzen muss?

Der Wille ändert sich ständig, so dass ich ihn nicht über den Konstruktor übergeben kann.

Soll ich dafür eine Funktion wie unten gezeigt erstellen?

class A
{

    public void SetValue()
    {
        b = new B();
        b.SetTest(10);
    }
}

class B
{
   int test;

   public void SetTest(int value)
   {
       test = value;
   }
}

Welche anderen Alternativen gibt es?

3voto

Hans Olsson Punkte 52909

Ich würde zustimmen, dass es ein bisschen verwirrend mit nur schreiben Eigenschaften (von einem Client der Klasse Gesichtspunkte), so dass ich versuche, sie zu vermeiden und stattdessen eine Set-Methode einer Art erstellen.

Der von Microsoft empfohlene Weg scheint auch darin zu bestehen, sie in eine Methode umzuschreiben (oder sie lesend und schreibend zu machen, falls geeignet): http://msdn.microsoft.com/en-us/library/ms182165.aspx

2voto

Prutswonder Punkte 9476

Sie können einen öffentlichen Setter und einen privaten Getter verwenden, falls Sie auf die Variable in ihrer eigenen Klasse zugreifen müssen.

class B {
   public int test { private get; set; }
}

0voto

Petar Minchev Punkte 45933

Wer hat gesagt, dass eine Eigenschaft nicht nur einen Accessor verwenden sollte? Ich sehe darin keinen Design-Fehler. Wenn es einen gibt, werde ich froh sein, etwas Neues zu lernen:)

0voto

Len Punkte 1993

Sie meinen so etwas wie das hier?

   public int Test { get; set; }

0voto

Klaus Byskov Pedersen Punkte 111081

Ihr Beispiel macht nicht wirklich viel Sinn, da Sie sich nicht an Ihre Instanz von B aber Sie können so vorgehen:

class A 
{
    private B b;

    public A()
    {
        this.b = new B();
    }

    public void SetValue() 
    { 
        this.b.Test = 10;
    } 
} 

class B 
{ 
   int test; 
   public int Test
   {
       get{ return this.test; }
       set{ this.test = value; }
   }    
} 

Eine andere Möglichkeit ist, die Test Eigenschaft eine Autoeigenschaft (bei der das Framework das Hintergrundfeld generiert), etwa so:

class B 
{ 
   public int Test{get; set;}
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X