Ist es möglich, einen Delegaten als Attributparameter zu haben?
Ist es möglich, einen Delegaten als parameter ein Attribut?
Wie diese:
public delegate IPropertySet ConnectionPropertiesDelegate();
public static class TestDelegate
{
public static IPropertySet GetConnection()
{
return new PropertySetClass();
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface,AllowMultiple=false,Inherited=true)]
public class WorkspaceAttribute : Attribute
{
public ConnectionPropertiesDelegate ConnectionDelegate { get; set; }
public WorkspaceAttribute(ConnectionPropertiesDelegate connectionDelegate)
{
ConnectionDelegate = connectionDelegate;
}
}
[Workspace(TestDelegate.GetConnection)]
public class Test
{
}
Und wenn das nicht möglich ist, was sind die sinnvollen alternativen?
InformationsquelleAutor der Frage George Silva | 2011-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Sie können nicht ein Delegierter, ein Attribut, Konstruktor-parameter. Finden Sie unter verfügbare Arten: Attribut parameter-Typen
Als workaround (obwohl es hacky und fehleranfällig) Sie können einen delegieren mit Reflexion:
InformationsquelleAutor der Antwort nemesv
Andere mögliche Problemumgehung ist die Schaffung von abstrakten Attribut-Typ mit abstrakten Methode gefunden, die Ihren Delegaten-definition und Umsetzung der Methode in konkreten Attribut-Klasse.
Es hat folgende Vorteile:
Beispiel:
InformationsquelleAutor der Antwort dadhi
Ich löste dies durch die Verwendung eines enum und array Zuordnung der Delegierten. Obwohl ich wirklich wie die Idee der Verwendung von Vererbung, in meinem Szenario, das würde von mir verlangen zu schreiben, die mehrere Kind-Klassen zu tun, relativ einfache Sachen. Dies sollte refactorable als gut. Der einzige Nachteil ist, dass Sie haben zu stellen Sie sicher, um die Delegierten index im array entspricht der enum-Wert.
InformationsquelleAutor der Antwort Jeff Sall