Ich finde oft, dass ich eine Eigenschaft schreibe, die träge bewertet wird. Etwas wie:Implementieren einer "LazyProperty" -Klasse - ist das eine gute Idee?
if (backingField == null)
backingField = SomeOperation();
return backingField;
Es ist nicht viel Code, aber es hat eine Menge bekommen wiederholt, wenn Sie eine Menge von Eigenschaften haben.
ich über das Definieren einer Klasse denke genannt LazyProperty:
public class LazyProperty<T>
{
private readonly Func<T> getter;
public LazyProperty(Func<T> getter)
{
this.getter = getter;
}
private bool loaded = false;
private T propertyValue;
public T Value
{
get
{
if (!loaded)
{
propertyValue = getter();
loaded = true;
}
return propertyValue;
}
}
public static implicit operator T(LazyProperty<T> rhs)
{
return rhs.Value;
}
}
Das würde mir ermöglichen, ein Feld wie folgt zu initialisieren:
first = new LazyProperty<HeavyObject>(() => new HeavyObject { MyProperty = Value });
Und dann der Körper der Eigenschaft könnte reduziert werden :
Dies würde von den meisten der Firma verwendet werden, da es in eine gehen würde gemeinsame Klassenbibliothek, die von den meisten unserer Produkte geteilt wird.
Ich kann nicht entscheiden, ob das eine gute Idee ist oder nicht. Ich denke, die Lösungen einige Profis haben, wie:
- Weniger Code
- Prettier Code
Auf der anderen Seite würde es schwieriger sein, den Code zu suchen und bestimmen, genau das, was passiert - vor allem, wenn einem Der Entwickler ist mit der LazyProperty-Klasse nicht vertraut.
Was denkst du? Ist das eine gute Idee oder sollte ich es aufgeben? Ist der implizite Operator auch eine gute Idee, oder möchten Sie die Value-Eigenschaft explizit verwenden, wenn Sie diese Klasse verwenden?
Meinungen und Vorschläge sind willkommen :-)
Ihr Punkt wird über den impliziten Operator notiert. Es ist eines dieser Dinge, über die ich Meinungen brauchte. – driis
Es ist gut pedantisch zu sein. +1. – dalle