我对代表们很陌生,我感到很困惑。 我的项目中有这行代码:
static Startup()
{
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
}
public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; }
有人可以向我解释一下,如果不使用代表,可能会是什么样子,或许可以将我引导给傻瓜指南代表?
答案 0 :(得分:1)
我会给你一个非教科书的答案,这就是我向自己解释的方式:)
一点背景:
在像C这样的非托管(内存)语言中,有一些函数指针用于通过保存它的地址值来访问函数。
在C#等托管语言中,达到函数的方法是保存对它的引用。 其中引用就像一个指针,指针指向内存中的某个位置,但与指针不同 它可以被GC等移动。
那么我们如何引用一个函数呢? 我们可以参考参考类型。 类是Reference类型, Delegate是a 特殊类型的CLASS ,它需要有一个签名,它代表&#34;代表&#34; (或&#34;参考&#34;)。
Action和Func就是这样一个具有预定义签名的代表
它只是省去了你写这个的麻烦:(来自msdn)
public delegate void ProcessBookDelegate(Book book);
ProcessBookDelegate handler = ProcessBookMethod; // in the scope of some class's method
而不是你可以这样写:
Action<Book> handler = ProcessBookMethod;
查看Action和Func
没有代表你可以写:
public static UserManager<IdentityUser> GetUserManager(UserStore<IdentityUser> userStore)
{
return new UserManager<IdentityUser>(userStore)
}
答案 1 :(得分:0)
这个问题非常广泛,但无论如何我都会尽力回答。我真的不确定为什么你的代码需要一个委托(从你给我们的那一点点开始)。实际上,因为它似乎没有做任何特别的事情。
如果您正在寻找如何使用代理,您可能需要查看this MSDN链接,以及SO上的this和this。
祝你好运。
答案 2 :(得分:0)
委托是一个函数指针。您可以只编写一个函数,而不是使用委托。它可能看起来像这样
static void Startup()
{
UserManagerFactory = getter;
}
static UserManager<IdentityUser> getter()
{
return new UserManager<IdentityUser>(new UserStore<IdentityUser>());
}
答案 3 :(得分:-1)
这是一个基于委托/ lambda的工厂。这种方法有时非常方便。有关此主题的更多信息,请查看this。在不使用lamda / delegate的情况下,在这种情况下,您将使用抽象工厂。