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