I'm gonna provide you with a non text book answer , it's the way i would explain it to my self :)
A little background :
In unmanaged (memory) languages like C , there are function pointers that are used in order to reach a function by holding the value of it's address.
In managed languages like C# The way to reach a function is by holding a reference to it.
where a reference is like a pointer in which it points to a place in memory but unlike a pointer
it can be moved around , by the GC and such .
So how do we reference a function ?
we can reference Reference Types.
a class is a Reference type and a Delegate is a
special kind of CLASS which needs to have a signature for the method it "represents" (or "references").
Action and Func are exactly that , a Delegate with a pre-defined signature
it just saves you the bother of writing this : (From msdn)
public delegate void ProcessBookDelegate(Book book);
ProcessBookDelegate handler = ProcessBookMethod; // in the scope of some class's method
instead of that you can write this :
Action<Book> handler = ProcessBookMethod;
see about Action and Func
Action and Func
Without a Delegate you can just write :
public static UserManager<IdentityUser> GetUserManager(UserStore<IdentityUser> userStore)
{
return new UserManager<IdentityUser>(userStore)
}