Frage

Ich möchte wissen, ob es eine Möglichkeit gibt, individuelle Verhalten auf die Eigenschaft auto get / set-Methoden.

hinzufügen

Ein offensichtlicher Fall, dass ich denken kann, ist jeder Satz Eigenschaft Methode aufrufen, auf irgendwelchen PropertyChanged Event-Handler als Teil einer System.ComponentModel.INotifyPropertyChanged Implementierung zu wollen. Dies würde eine Klasse ermöglicht zahlreiche Eigenschaften, die beobachtet werden können, wobei jede Eigenschaft definiert ist Eigenschaft auto-Syntax.

Im Grunde frage ich mich, ob es etwas ist ähnlich entweder eine get / set-Vorlage oder Post erhalten / set Haken mit Klassenbereich.

(Ich weiß, die gleiche End-Funktionalität leicht in etwas ausführlichen Art und Weise erreicht werden kann - ich nur Duplikation eines Musters hasst)

War es hilfreich?

Lösung

Nein, Sie haben „traditionelle“ Eigenschaftsdefinitionen für benutzerdefiniertes Verhalten verwenden.

Andere Tipps

Nein, Sie können nicht: auto Eigenschaft eine Abkürzung für eine explizite Zugriffs zu einem privaten Bereich ist. z.

public string Name { get; set;} 

ist eine Verknüpfung mit

private string _name;
public string Name { get { return _name; } set { _name = value; } };

Wenn Sie benutzerdefinierte Logik setzen, müssen Sie schreiben explizit erhalten und eingestellt werden.

Schauen Sie auf Postsharp . Es ist ein AOP Framework für typicaly Problem „dieses Codemuster ich einen Tag hunderd Zeit zu tun, wie ich es automatisieren können?“. Sie können mit Postsharp vereinfachen dieses (zum Beispiel):

public Class1 DoSomething( Class2 first, string text, decimal number ) {
    if ( null == first ) { throw new ArgumentNullException( "first" ); }
    if ( string.IsNullOrEmpty( text ) ) { throw new ArgumentException( "Must be not null and longer than 0.", "text" ) ; }
    if ( number < 15.7m || number > 76.57m ) { throw new OutOfRangeArgumentException( "Minimum is 15.7 and maximum 76.57.", "number"); }

    return new Class1( first.GetSomething( text ), number + text.Lenght );
}

    public Class1 DoSomething( [NotNull]Class2 first, [NotNullOrEmpty]string text, [InRange( 15.7, 76.57 )]decimal number ) {
        return new Class1( first.GetSomething( text ), number + text.Lenght );
}

Aber das ist nicht alles! :)

Wenn es ein Verhalten, das Sie viel während der Entwicklung wiederholen werden, können Sie einen benutzerdefinierten Code-Snippet für Ihre spezielle Art der Immobilie erstellen.

Sie könnten prüfen, mit Postsharp Abfangjäger des Setter zu schreiben. Es ist sowohl LGPL und GPL-lizenzierten je nachdem, welche Teile der Bibliothek, die Sie verwenden.

Die nächste Lösung, die ich denken kann, wird mit einer Hilfsmethode:

public void SetProperty<T>(string propertyName, ref T field, T value)
 { field = value;
   NotifyPropertyChanged(propertyName);
 }

public Foo MyProperty 
 { get { return _myProperty}
   set { SetProperty("MyProperty",ref _myProperty, value);}
 } Foo _myProperty;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top