Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将子对象的地址传递给类属性_C# - Fatal编程技术网

C# 将子对象的地址传递给类属性

C# 将子对象的地址传递给类属性,c#,C#,在VB.net中,我可以在将子对象作为参数传递时使用AdressOf 我是C#新手,我尝试使用委托将sub传递给类属性,这样我就可以从这个类调用sub 这是我到目前为止的代码 using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { AuthorizationHelper.UserHelperOptions

在VB.net中,我可以在将子对象作为参数传递时使用AdressOf

我是C#新手,我尝试使用委托将sub传递给类属性,这样我就可以从这个类调用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);
    }
}

声明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);