Der Unterschied besteht darin, dass das erste man in etwas passieren würde es ermöglichen, die eine konkretere Art IFileInfo
Umsetzung verwendet. Zum Beispiel:
Func<IEnumerable<SpecialFileInfo>> lister =() => ListFiles();
Import(lister, file => Console.WriteLine(file.SpecialProperty));
(. Wo SpecialProperty
eine Eigenschaft ist, die auf SpecialFileInfo
existiert, aber nicht IFileInfo
) Sie können dies nicht tun, mit dieser Form.
Es gibt eine sehr geringe Ausführungszeit Strafe für generische Methoden und Typen - es wird JITted einmal für jeden Werttyp T
Typ Argument (nicht vergessen, ein Wert Typ könnte implementieren IFileInfo
) und einmal für alle Referenztyp (dh sobald es JITted oder ein Referenztyp ist, muss es nicht erneut JITted werden). Dies wird jedoch in Ihrer realen Anwendung sicherlich vernachlässigbar sein.
Danke, Jon. Ich war mir der Ausführungsverzögerung nicht bewusst, die durch generische Methoden/Typen verursacht wurde. Ich bezweifle, dass dies zu erheblichen Leistungseinbußen in meiner Bewerbung führen würde. – Sung
In der Tat, es ist fast immer vernachlässigbar - und es ist nur höchstens einmal pro Typ Argument, droht, wenn Sie Foo verwenden und später wieder Foo verwenden, wird es den Code JITted früher verwenden. –