我有一个类型的字典
字典 [string,handler_func]
在哪里
handler_func 是类型的委托(delegate)
public delegate void HANDLER_FUNC(object obj, TcpClient client);
现在我有一个像这样的属性类
[AttributeUsage(AttributeTargets.Method)]
public class MessageHandlerAttribute : Attribute
{
public MessageHandlerAttribute(string s1, HANDLER_FUNC hf)
{
s1 = name;
msgtype = hf;
}
private string name;
public string HandlerName
{
get { return name; }
set { name = value; }
}
private HANDLER_FUNC msgtype;
public HANDLER_FUNC MessageName
{
get { return msgtype; }
set { msgtype = value; }
}
}
基本思想是我将这个属性应用到类中的一个方法,然后在某处使用反射来填充上面的字典
问题是除非这个方法是静态的,否则属性不起作用 所以
[MessageHandlerAttribute("HandleLoginResponse",HandleLoginResponse)]
private void HandleLoginResponse(object obj, TcpClient client)
导致标准需要一个对象
那么我有什么选择(我不希望处理程序方法是静态的)
谢谢
最佳答案
[MessageHandlerAttribute("HandleLoginResponse",HandleLoginResponse)]
private void HandleLoginResponse(object obj, TcpClient client)
我不明白为什么你需要在属性中指定方法:因为属性应用于方法,你已经可以检索方法......你可以做类似的事情:
[MessageHandlerAttribute("HandleLoginResponse")]
private void HandleLoginResponse(object obj, TcpClient client)
...
foreach(MethodInfo method in this.GetType().GetMethods())
{
MessageHandlerAttribute attr = Attribute.GetCustomAttribute(method, typeof(MessageHandlerAttribute)) as MessageHandlerAttribute;
if (attr != null)
{
HANDLER_FUNC func = Delegate.CreateDelegate(typeof(HANDLER_FUNC), this, method) as HANDLER_FUNC;
handlers.Add(attr.HandlerName, func);
}
}
关于C#委托(delegate)和属性语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1205104/