c#委托函数<;t、 tresult>;例如
本文关键字:tresult 例如 gt lt 函数 | 更新日期: 2023-09-27 18:21:25
我对代理真的很陌生,我很困惑。我的项目中有这样一行代码:
static Startup()
{
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
}
public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; }
有人能向我解释一下在不使用代理人的情况下可能会是什么样子吗?也许可以指引我去看一本假人代理人指南?
我要给你一个非课本的答案,这是我向自己解释的方式:)
一点背景:
在像C这样的非托管(内存)语言中,有一些函数指针用于通过保持函数地址的值来访问函数。
在像C#这样的托管语言中,访问函数的方法是持有对它的引用。其中引用类似于指向内存中某个位置的指针,但与指针不同它可以通过GC等四处移动。
那么我们如何引用函数呢?我们可以引用引用类型。类是引用类型,委托是特殊类型的CLASS,需要为其"表示"(或"引用")的方法提供签名。
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)
}
这个问题非常宽泛,但无论如何我都会尽力回答。我真的不知道为什么你的代码需要一个委托(从你给我们的一点点开始)。事实上,因为它似乎没有做任何特别的事情。
如果你正在寻找如何使用委托,你可能想看看这个MSDN链接,以及已经在SO.上的这个和这个
祝你好运。
委托是一个函数指针。您可以只编写一个函数,而不用使用委托。它可能看起来像这个
static void Startup()
{
UserManagerFactory = getter;
}
static UserManager<IdentityUser> getter()
{
return new UserManager<IdentityUser>(new UserStore<IdentityUser>());
}