C# 如何理解谁想要方法的结果

C# 如何理解谁想要方法的结果,c#,unity3d,C#,Unity3d,我有两种方法alphaClicked()和betaClicked(),为了让它们工作,我们需要连接到网络中的一个服务,所以我有另一种方法名为connect(),所以在这两个类中,我们都需要先连接,所以我们检查是否连接,如果没有连接,然后我们调用connect()method然后我们在ActionConnectionResultReceived中获得连接结果,因此如果我们成功连接,我想调用alphaClicked(),如果alpha是请求connect()的,调用betaClicked()如果be

我有两种方法
alphaClicked()
betaClicked()
,为了让它们工作,我们需要连接到网络中的一个服务,所以我有另一种方法名为
connect()
,所以在这两个类中,我们都需要先连接,所以我们检查是否连接,如果没有连接,然后我们调用
connect()
method然后我们在
ActionConnectionResultReceived
中获得连接结果,因此如果我们成功连接,我想调用alphaClicked(),如果alpha是请求
connect()
的,调用
betaClicked()
如果
betaClicked()
是请求
connect()的
method这样做的最佳方法是什么

总而言之,这是一个问题:

alpha
beta
需要
connect
但是
connect
结果不会立即返回,所以我们通过
ActionConnectionResultReceived
获取它。那么,如何获取谁调用了connect呢
alpha
beta

private void alphaClicked()
{
    if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) {
        //do something
    }
    else
    {
        Connect();
    }
}

private void betaClicked()
{
    if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) {
        //do something else
    }
    else
    {
        Connect();
    }
}


private void ActionConnectionResultReceived(GooglePlayConnectionResult result)
{
    if (result.IsSuccess)
    {
        Debug.Log("Connected!");
        //if alpha requested call alpha if beta requested call beta
        //how to do this?
    }
    else
    {
        Debug.Log("Cnnection failed with code: " + result.code.ToString());
    }
}

private void Connect()
{
    GooglePlayConnection.Instance.Connect(); 
}

如果没有
Async
事件处理程序
,并且每次只调用一个
connect
,则可以引入一个存储最后一个调用方的变量:

string gCaller = "";
private void Connect(string caller){
    gCaller = caller;
    //something else
}
然后像这样使用它:

private void alphaClicked()
{
   if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) {
        //do something
    }
   else
   {
       Connect("alpha");
   }
}

private void betaClicked()
{
   if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) {
        //do something else
    }
   else
   {
       Connect("beta");
   }
}
然后,当您需要最后一个创建连接的人时,可以使用
gCaller
中的信息

private void ActionConnectionResultReceived(GooglePlayConnectionResult result)
{
    if (result.IsSuccess)
    {
        Debug.Log("Connected!");
        switch (gCaller){
            case "alpha":
              alphaClicked();
              break;
            case "beta":
              betaClicked();
              break;
            default:
              break;
        }
    }
    else
    {
        Debug.Log("Cnnection failed with code: " + result.code.ToString());
    }
}

但是最好的方法是为连接的
事件创建
async
或事件处理程序。看看这一点。

不使用
异步
事件处理程序
,并且如果您每次只调用一个
连接
,您可以引入一个存储最后一个调用方的变量:

string gCaller = "";
private void Connect(string caller){
    gCaller = caller;
    //something else
}
然后像这样使用它:

private void alphaClicked()
{
   if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) {
        //do something
    }
   else
   {
       Connect("alpha");
   }
}

private void betaClicked()
{
   if(GooglePlayConnection.State == GPConnectionState.STATE_CONNECTED) {
        //do something else
    }
   else
   {
       Connect("beta");
   }
}
然后,当您需要最后一个创建连接的人时,可以使用
gCaller
中的信息

private void ActionConnectionResultReceived(GooglePlayConnectionResult result)
{
    if (result.IsSuccess)
    {
        Debug.Log("Connected!");
        switch (gCaller){
            case "alpha":
              alphaClicked();
              break;
            case "beta":
              betaClicked();
              break;
            default:
              break;
        }
    }
    else
    {
        Debug.Log("Cnnection failed with code: " + result.code.ToString());
    }
}

但是最好的方法是为连接的
事件创建
async
或事件处理程序。看看这个。

在建立连接之前,alphaClicked/betaClicked是否可能被多次调用?我可以防止这种情况发生搜索依赖注入;它正是为这种情况而发明的。依赖注入有何帮助?在建立连接之前,alphaClicked/betaClicked是否可能被多次调用?我可以防止这种情况发生搜索依赖注入;它正是为这个场景而发明的。依赖注入有何帮助?已经以这种方式实现了,我想知道如何以一种更干净的方式来实现它,比如
events
,当您想了解
async
wait
。。。或者依赖注入(正如Pieter所建议的)已经以这种方式实现了,我想知道如何以一种更干净的方式来实现它,如您所说的
events
,然后您可能想了解
async
wait
。。。或者依赖注入(正如Pieter所建议的)