2017-02-20 45 views
0

сегодня я искал для некоторых проектов с ilspy я не понимаю, как действия могут быть использованы, как это, в одном классе этот метод называетсяC# передача действия с параметрами

public void Login(Action success, Action<bool> failure) 
    { 
     if (!FB.IsInitialized) 
     { 
      Debug.Log("[FB] Not yet initialized. Will init again!"); 
      FB.Init(new InitDelegate(this.OnInitComplete), null, null); 
      return; 
     } 
     new LoginWithReadPermissions(this.READ_PERMISSIONS, delegate 
     { 
      ServiceLocator.GetDB().SetBool("facebookBound", true, false); 
      this.OnLoginCompleted(success, failure); 
     }, delegate 
     { 
      failure(false); 
     }); 
    } 

и это другой класс, вызывается описанным выше способом

public class LoginWithReadPermissions 
{ 
    private readonly Action _failureCallback; 

    private readonly Action _successCallback; 

    public LoginWithReadPermissions(string[] scope, Action success, Action failure) 
    { 
     this._successCallback = success; 
     this._failureCallback = failure; 
     FB.LogInWithReadPermissions(scope, new FacebookDelegate<ILoginResult>(this.AuthCallback)); 
    } 

    private void AuthCallback(ILoginResult result) 
    { 
     if (result.Error == null && FB.IsLoggedIn) 
     { 
      this._successCallback(); 
     } 
     else 
     { 
      this._failureCallback(); 
     } 
    } 
} 

Может кто-то пожалуйста, объясните, что происходит там, я никогда не сталкивался с такого рода использования действий. Спасибо за ответы.

+0

Вы говорите об использовании 'delegate'? –

+1

http://stackoverflow.com/questions/11376657/what-is-the-difference-between-delegate-action-in-c-sharp –

ответ

0
public void Login(Action success, Action<bool> failure) 
{ 
    if (!FB.IsInitialized) 
    { 
     Debug.Log("[FB] Not yet initialized. Will init again!"); 
     FB.Init(new InitDelegate(this.OnInitComplete), null, null); 
     return; 
    } 
    new LoginWithReadPermissions(this.READ_PERMISSIONS, delegate 
    { 
     ServiceLocator.GetDB().SetBool("facebookBound", true, false); 
     this.OnLoginCompleted(success, failure); 
    }, delegate 
    { 
     failure(false); 
    }); 
} 

Код выше просто сокращенная для этого:

public void Login(Action success, Action<bool> failure) 
    { 
     Action successAction =() => 
     { 
      ServiceLocator.GetDB().SetBool("facebookBound", true, false); 
      this.OnLoginCompleted(success, failure); 
     }; 

     Action failureAction =() => 
     { 
      failure(false); 
     }; 

     if (!FB.IsInitialized) 
     { 
      Debug.Log("[FB] Not yet initialized. Will init again!"); 
      FB.Init(new InitDelegate(this.OnInitComplete), null, null); 
      return; 
     } 
     new LoginWithReadPermissions(this.READ_PERMISSIONS, successAction, failureAction); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^