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#委托函数<;t、 tresult>;例如

我要给你一个非课本的答案,这是我向自己解释的方式:)

一点背景:

在像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>());
}
这是一个基于委托/lambda的工厂。这种方法有时非常方便。查看此以了解有关该主题的更多信息。在这种情况下,如果不使用lamda/delete,您将使用抽象工厂。