Czy można ustawić delegata jako parametr atrybutu?Czy możliwe jest posiadanie delegata jako parametru atrybutu?
Jak to:
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
{
}
A jeśli jej nie możliwe, jakie są sensowne alternatywy?
W rzeczywistości jest to dobre obejście. Zbudowałem interfejs speficic do tego, ale delegat jest o wiele łatwiejszy. Dzięki! –
To obejście, ale nie dobre. Dokładnie tak, jak powiedział @nemesv - jest hackowaty i podatny na błędy, ponieważ jeśli zmienisz nazwę metody GetConnection na inną, używając menu refactor, ciąg "GetConnection" nie zostanie automatycznie zmieniony. – prostynick
Czy istnieje możliwość w C# ręcznie ograniczyć typ argumentów konstruktora? Nie słyszałem o tym czegoś, ale jak widzimy w typie "Atrybut" jest to możliwe. W jaki sposób? – monstr