В VB. net Я мог бы использовать AdressOf при передаче подпрограммы в качестве параметра.
Я новичок в C#, и я пытаюсь использовать делегат для передачи подпрограммы в класс свойство, поэтому я могу вызвать sub из этого класса.
Вот мой код на данный момент ...
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
AuthorizationHelper.UserHelperOptions options = new AuthorizationHelper.UserHelperOptions()
{
UserAuthorizedCallback = UserHelper.InitializeUser() // < problem
};
}
}
}
public class UserHelper
{
public static void InitializeUser(string userLogin)
{
// Do some stuff
}
}
// -------------------------------------------------------------------------------------------------
// In another class library...
// -------------------------------------------------------------------------------------------------
public class AuthorizationHelper
{
public class UserHelperOptions
{
public delegate void UserAuthorizedCallbackDelegate(string userLogin);
public UserAuthorizedCallbackDelegate UserAuthorizedCallback { get; set; }
}
public static void VerifyUser(UserHelperOptions options, string login, string password)
{
// If is valid user...
options.UserAuthorizedCallback.Invoke(login);
}
}
Но UserAuthorizedCallback = UserHelper.InitializeUser()
хочет, чтобы я передал userlogin.
Что я делаю не так?
ОБНОВЛЕНИЕ:
Этот код в VB отлично работает, и это то, что я пытаюсь преобразовать в c# ...
Module Module1
Sub Main()
Dim options As New AuthorizationHelper.Options With {
.Callback = AddressOf UserHelper.InitializeUser
}
AuthorizationHelper.VerifyUser(options, "test", "test")
End Sub
End Module
Public Class UserHelper
Public Shared Sub InitializeUser(userLogin As String)
Console.WriteLine("bla bla")
Console.ReadLine()
End Sub
End Class
Public Class AuthorizationHelper
Public Class Options
Public Delegate Sub UserAuthorizedCallbackDelegate(userLogin As String)
Public Property Callback As UserAuthorizedCallbackDelegate
End Class
Public Shared Sub VerifyUser(options As Options, login As String, password As String)
' If is valid user...
options.Callback.Invoke(login)
End Sub
End Class