¿Es posible tener un delegado como parámetro de un atributo?¿Es posible tener un delegado como parámetro de atributo?
De esta manera:
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
{
}
Y si no es posible, ¿cuáles son las alternativas razonables?
En realidad, es una buena solución. Construí una interfaz específica para hacer esto, pero el delegado es muchísimo más fácil. ¡Gracias! –
Es una solución, pero no es buena. Es exactamente como dijo @nemesv: hacky y propenso a errores, porque si cambias el nombre del método GetConnection a otra cosa usando el menú refactor, la cadena "GetConnection" no cambiará automáticamente. – prostynick
Entonces, ¿existe una posibilidad en C# restringir manualmente los argumentos tipo de constructor? No escuché nada al respecto, pero como vemos en el tipo 'Attribute' es posible. ¿Cómo? – monstr