编辑:检查我在下面发布的答案。我创建了一个调用其他函数的代理方法。
我有一个类,我想从不同的类中分配方法。最好的方法是什么?
到目前为止,我已经尝试过了:
namespace LeagueProj.DataGrabber{
public class DataGrabber : IDataGrabber
{
private SummonerMethod sm = new SummonerMethod();
private MatchlistMethod mlm = new MatchlistMethod();
private MatchMethod mm = new MatchMethod();
public delegate Summoner GetSummoner();
public delegate Matchlist GetMatchlist();
public delegate Data GetAllMatchData();
public DataGrabber()
{
GetSummoner = sm._GetSummoner;
GetMatchlist = mlm._GetMatchlist;
GetAllMatchData = mm._GetAllMatchData;
}
}
}
然而,IDE说在构造函数中,GetSummoner,GetMatchlist和GetAllMatchData是类型,但是像变量一样被使用(这是可以理解的)。我意识到我可能会犯这个错误,所以最好的办法是什么呢?
答案 0 :(得分:1)
您声明了委托,但不是具有此类委托的字段:
public class DataGrabber : IDataGrabber
{
private SummonerMethod sm = new SummonerMethod();
private MatchlistMethod mlm = new MatchlistMethod();
private MatchMethod mm = new MatchMethod();
public delegate Summoner GetSummoner();
public delegate Matchlist GetMatchlist();
public delegate Data GetAllMatchData();
public GetSummoner Method1;
public GetMatchlist Method2;
public GetAllMatchData Method3;
public DataGrabber()
{
Method1 = sm._GetSummoner;
Method2 = mlm._GetMatchlist;
Method3 = mm._GetAllMatchData;
}
}
答案 1 :(得分:1)
您需要:
示例:
internal class MyClass
{
public MyClass(GetElement getElement)
{
GetElement = getElement;
}
public GetElement GetElement { get; }
}
internal delegate Element GetElement();
internal class Element
{
}
答案 2 :(得分:0)
您可以使用操作
执行此操作public class MyActioner
{
private Action MyAction;
public MyActioner()
{
MyAction = () => MyActionMethod();
}
public void MyActionMethod()
{
}
}
答案 3 :(得分:0)
好吧,所以朋友向我建议我只是代理这些方法并让它们返回其他方法。这是一个更好的主意,imo。以下是未来参考的代码:
namespace LeagueProj.DataGrabber
{
public class DataGrabber
{
private SummonerMethod sm;
private MatchlistMethod mlm = new MatchlistMethod();
private MatchMethod mm = new MatchMethod();
public Summoner GetSummoner(string summonerName) { return sm._GetSummoner(summonerName); }
private List<Matchlist> GetMatchlist(long accountId) { return mlm._GetMatchlist(accountId); }
public List<Data> GetAllMatchData(List<Matchlist> matchlist, long accountId) { return mm._GetAllMatchData(matchlist, accountId); }
}
}