die folgende Klasse Stellen Sie sich vor:Dynamisch Eigenschaft Getter/Setter durch Reflexion erzeugen oder ähnliche
public class Settings
{
[FileBackedProperty("foo.txt")]
public string Foo { get; set; }
}
Ich mag wäre in der Lage sein, etwas ähnlich wie oben zu schreiben und haben settings.Foo
aus der Datei „foo.txt“ lesen und settings.Foo = "bar"
schreiben Sie auf "foo.txt".
Offensichtlich ist dies ein vereinfachtes Beispiel, und ich würde das oben in einer Produktionsanwendung nicht tun, aber es gibt andere Beispiele, wie wenn ich Foo in ASP.net Session Zustand "foo" gespeichert werden wollte, aber ich werde müde den folgenden Code über zu schreiben und über:
public int Foo
{
get
{
if (Session["foo"] != null)
return Convert.ToInt32(Session["foo"]);
else
// Throw an exception or return a default value
}
set
{
Session["foo"] = value;
}
}
(Auch in diesem Beispiel wird vereinfacht, und ich würde den obigen Code nicht schreiben, ich liege tatsächlich, ich habe den obigen Code und arbeite es Refactoring , also diese Frage)
Das obige Beispiel ist in Ordnung, es sei denn, Sie haben 50 verschiedene Sitzungswerte, die alle ähnliche Logik haben. Kann ich die zweite Eigenschaft in etwas Ähnliches umwandeln? (? Mit Attributen und Reflexion, oder vielleicht eine andere Methode)
Wenn Sie Visual Studio verwenden, sollten Sie sich [Code-Snippets] (http://msdn.microsoft.com/en-us/library/ms165392%28v=vs.90%29.aspx) ansehen. Sie erlauben Ihnen, etwas kurz zu tippen, auf den gewünschten Code zu erweitern und dann bestimmte Bereiche auszufüllen. Ähnlich wie bei der bestehenden propg, etc. –
@JoshuaDrake Das scheint genau so schlimm wie Kopieren/Einfügen. Was ist, wenn ich die Implementierung ändern möchte? Ich muss immer noch zurückgehen und jede Immobilie einzeln ändern. – thelsdj
Sie möchten also die Eigenschaften zur Laufzeit dynamisch hinzufügen? Haben Sie alle Server-Maschinen oder geringe Erwartungen an die Leistung? Nicht, dass Sie das nicht können, aber ich warne sehr davor. Wenn Sie nicht zur Laufzeit meinen, dann müssten Sie sowieso jede Codeausgabe neu generieren. –