Code: Select all
[Description("It must be called from a property, else it is a runtime error.")]
protected T Load()
{
return InternalLoad();
}
oder set_ hat, wird eine Ausnahme ausgelöst. Es passiert alles zur Laufzeit, was mir nicht gefällt.
Ich möchte wissen, ob es eine Möglichkeit gibt, dies zur Kompilierungszeit sicherzustellen dass der Aufrufer immer eine Eigenschaft ist. Mit anderen Worten, nur Eigenschaften sollten diese Methode aufrufen dürfen. Gibt es eine Möglichkeit, dies zur Kompilierungszeit zu überprüfen?
Als letzten Ausweg ist es möglich, den C#-Compiler zu erweitern, der verwendet werden würde ein benutzerdefiniertes Attribut (z. B. CallableFromAttribute), um das sicherzustellen?
Ich möchte es so flexibel wie möglich machen:
Code: Select all
[CallableFrom(Caller.Property)] //Caller is an enum
protected T Load()
{
return InternalLoad();
}
[CallableFrom(Caller.Property | Caller.Method)]
protected T SomeOtherLoad()
{
//code
}
Code: Select all
public string Method()
{
var x = this.SomeOtherLoad(); //okay
var y = this.Load(); //compilation error !!
}

Ich benötige diese Funktion, weil ich versuche, eine Klasse namens PropertyManager zu implementieren dient als Basis-Klasse für andere Klassen, die Eigenschaften definieren müssen. Die typische Verwendung dieser Klasse wäre folgende:
Code: Select all
public sealed Vendor : PropertyManager
{
public string VendorName
{
get { return this.Load(); }
set { this.Store(value); }
}
public DateTime Created
{
get { return this.Load(); }
set { this.Store(value); }
}
}