C# 将子对象的地址传递给类属性
在VB.net中,我可以在将子对象作为参数传递时使用AdressOf 我是C#新手,我尝试使用委托将sub传递给类属性,这样我就可以从这个类调用sub 这是我到目前为止的代码C# 将子对象的地址传递给类属性,c#,C#,在VB.net中,我可以在将子对象作为参数传递时使用AdressOf 我是C#新手,我尝试使用委托将sub传递给类属性,这样我就可以从这个类调用sub 这是我到目前为止的代码 using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { AuthorizationHelper.UserHelperOptions
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);
}
}
声明InitializeUser(字符串userLogin),但随后调用它时不带参数。调用或构造时需要添加参数,并将方法声明为不需要参数。为了设置委托,不需要括号。只有在执行委托时才需要它们
AuthorizationHelper.UserHelperOptions options = new AuthorizationHelper.UserHelperOptions()
{
UserAuthorizedCallback = UserHelper.InitializeUser
};
当您将其与VB.NET代码进行比较时,您会发现它非常相似:
Dim options As New AuthorizationHelper.Options With {
.Callback = AddressOf UserHelper.InitializeUser // no paranthesis here
}
但是,当您希望执行委托时,需要添加以下参数:
UserAuthorizedCallback(userLogin);
您应该删除
()
。OP希望将初始化器作为代理传递。您不需要向委托设置器添加参数。这就是代表的观点。
UserAuthorizedCallback(userLogin);