內架空委託定義的我很好奇,想知道發生了什麼幕後在這樣的情況:另一種方法
public static void OuterMethod() {
// some random code
var a = 42;
var b = "meaning of life";
Func<string, object> factory = (aString) {
// do something with a and b
return "Hello World";
};
// some more random code
factory("My string");
}
我在OuterMethod
被稱爲非常頻繁的情況下特別感興趣。在我的情況下,這是MVC請求管道,其中OuterMethod
爲每個請求調用一次。
我每次調用該方法時都必須構建factory
,從而導致大量開銷?我可以很容易地將OuterMethod
以外的Func移動到它自己的靜態方法中,但是在我的實際場景中,因爲它是在裏面定義的,我可以訪問很多變量,我需要做我的計算,否則我需要在簽名中包含方法在外面定義。也許這只是一個微型優化,但我想更好地理解編譯器如何處理這些類型的語句。
Servy的答案是正確的,您將在每次調用OuterMethod時創建一個委託的新參考。然而,從設計的角度來看,這可能會違反單一的責任原則。 OuterMethod負責構建對象(或者執行計算),並負責OuterMethod的真實工作。因此,以自己的方法進行工廠/計算會更可取。當然,如果您只是使用OuterMethod爲代理創建一個狀態環境,那就沒問題。 –