我试图让我的GetStringFromServer方法更抽象,因为我不想为我对服务器的所有不同调用创建相同的方法,结果总是一样的;无论如何都是一个json字符串。
public delegate void GoogleServerResponse(string result);
public static event GoogleServerResponse OnGoogleServerResponse;
void Start () {
print ("going to google...");
StartCoroutine( GetStringFromServer("http://google.com", OnGoogleServerResponse) );
}
IEnumerator GetStringFromServer(string url, Event e) {
WWW www = new WWW(url);
yield return www;
if( e != null )
e (www.text);
}
我想这可以通过URL触发传入的事件,使我能够收听事件,并为我的网络服务器(不是google ofc,但通常" / getplayer"," / createnewgame"等等。)
答案 0 :(得分:1)
只有当您尝试传递另一个类的事件(课外)时,您才能通过事件这一事实才适用。
如果您尝试从定义事件的类中传递事件,则无人阻止您这样做。
例如,以下内容适用于我。
public delegate void GoogleServerResponse(string result);
public class PassEvent
{
public static event GoogleServerResponse OnGoogleServerResponse;
private void Start()
{
print("going to google...");
StartCoroutine(GetStringFromServer("http://google.com", OnGoogleServerResponse));
}
private void print(string p)
{
}
private void StartCoroutine(IEnumerator enumerator)
{
}
private IEnumerator GetStringFromServer(string url, GoogleServerResponse myEvent)
{
Uri www = new Uri(url);
yield return www;
if (myEvent != null)
{
myEvent(www.text);
}
}
}
附注:避免使用" On"命名事件。前缀,调用事件的辅助方法应使用[On]EventName
命名约定命名。
答案 1 :(得分:0)
您无法传递Event
,您应该尝试(代理/包装) Action
。
IEnumerator GetStringFromServer(string url, Action<string> e) {
WWW www = new WWW(url);
yield return www;
if( e != null )
e (www.text);
}
并称之为:
StartCoroutine( GetStringFromServer("http://google.com", (param) => {
if(OnGoogleServerResponse != null)
OnGoogleServerResponse(param);
}));