C#委托(delegate)和属性语法问题

标签 c# syntax

我有一个类型的字典 字典 [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/

相关文章:

PHP - 类数组中带有括号的奇怪语法错误

scala - "for (i <- 1 to x; j <- 1 to y)"实际上如何增加 Scala 中的变量?

c# - 系统.IO.FileLoadException

C# 使用 LINQ 查询更新字典 <string,string>

c# - 为什么 WPF Binding 不调用 PropertyMetadata 中定义的 propertyChangedCallback,而代码隐藏中的 setter 调用?

syntax - "Variable ... must occur on both sides of this | pattern"

javascript - JavaScript 的正则表达式符号有什么问题?

c# - 将 WPF Button CommandParameter 绑定(bind)到 DataTemplate 中的 Button 本身

c# - 具有 TokenEndpoint 基本身份验证的 ASP.NET Core OAuth

syntax - 如何使用markdown语法编写包含右括号的链接?