如何创建一个对象,其构造函数接受来自另一个类的方法?

时间:2017-02-14 15:38:13

标签: c# visual-studio delegates

我正在尝试创建一个对象,该对象包含对其他类中特定方法的调用。您应该能够从对象的实例触发对该方法的调用。据我所知,这样做的方式是代表。那么这是一个有效的方法吗?从要用作委托的类中包装方法,然后像这样设置对象?

public class ItemCombination
{
    public ItemCombination(string Item1, string Item2, Delegate interaction)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.interaction = interaction;
    }

    public string Item1 { get; set; }
    public string Item2 { get; set; }
    public Delegate interaction { get; set; }

    public void Interact()
    {
       interaction();
    }
}

1 个答案:

答案 0 :(得分:1)

这正是代表们的目的,但是正如评论中已经提到的那样,您应该使用类型化的代理,例如System.Action<T...>如果代理具有void返回类型,或Func<T..., R>如果它返回R的实例。您的示例将如下所示:

public class ItemCombination
{
    public ItemCombination(string Item1, string Item2, Action interaction)
    {
        this.Item1 = Item1;
        this.Item2 = Item2;
        this.interaction = interaction;
    }

    public string Item1 { get; set; }
    public string Item2 { get; set; }
    public Action Interaction { get; set; }

    public void Interact()
    {
       // safeguard against null delegate
       Interaction?.Invoke();
    }
}