c#委托func <t,tresult =“”>例子</t,>

时间:2014-09-09 16:59:44

标签: c# delegates

我对代表们很陌生,我感到很困惑。 我的项目中有这行代码:

    static Startup()
    {
        UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
    }

    public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; }

有人可以向我解释一下,如果不使用代表,可能会是什么样子,或许可以将我引导给傻瓜指南代表?

4 个答案:

答案 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

Action and Func

没有代表你可以写:

 public static UserManager<IdentityUser> GetUserManager(UserStore<IdentityUser> userStore)
 {
     return new UserManager<IdentityUser>(userStore)
 }

答案 1 :(得分:0)

这个问题非常广泛,但无论如何我都会尽力回答。我真的不确定为什么你的代码需要一个委托(从你给我们的那一点点开始)。实际上,因为它似乎没有做任何特别的事情。

如果您正在寻找如何使用代理,您可能需要查看this MSDN链接,以及SO上的thisthis

祝你好运。

答案 2 :(得分:0)

委托是一个函数指针。您可以只编写一个函数,而不是使用委托。它可能看起来像这样

static void Startup()
{
    UserManagerFactory = getter;
}

static UserManager<IdentityUser> getter()
{
    return new UserManager<IdentityUser>(new UserStore<IdentityUser>());
}

答案 3 :(得分:-1)

这是一个基于委托/ lambda的工厂。这种方法有时非常方便。有关此主题的更多信息,请查看this。在不使用lamda / delegate的情况下,在这种情况下,您将使用抽象工厂。