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所建议的)