2 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
在函數(shù)的多個(gè)實(shí)例中重用資源的方法是將其聲明為static. 例如,假設(shè)我想重用HttpClient:
public static class PeriodicHealthCheckFunction
{
private static HttpClient _httpClient = new HttpClient();
[FunctionName("PeriodicHealthCheckFunction")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")]TimerInfo healthCheckTimer,
ILogger log)
{
string status = await _httpClient.GetStringAsync("https://localhost:5001/healthcheck");
log.LogInformation($"Health check performed at: {DateTime.UtcNow} | Status: {status}");
}
}

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
C# 中沒(méi)有像 Native C++ 那樣的“函數(shù)作用域”變量。但是您可以使用許多類似的構(gòu)造:
使用 Public get 但 private Set 創(chuàng)建一個(gè)屬性。這樣,只有類代碼(如構(gòu)造函數(shù))可以設(shè)置值。您會(huì)看到這種模式在 .NET Framework 中被大量使用。然而,它并不能真正避免意外地在類代碼中設(shè)置值。如果您從不在類代碼中的其他任何地方使用此值,效果最好。
另一個(gè)選項(xiàng)是“只讀”變量屬性。它強(qiáng)制要求該值必須設(shè)置一次(在構(gòu)造函數(shù)中),但也只能設(shè)置一次。您仍然需要將實(shí)例交給構(gòu)造函數(shù)或使用靜態(tài)。
另一種選擇是添加靜態(tài)變量來(lái)存儲(chǔ)數(shù)據(jù)。但這種模式是絕對(duì)不可取的。如果您永遠(yuǎn)不需要第二組具有不同共享值的實(shí)例,那么您就輸了。這將會(huì)發(fā)生,就像垃圾收集一樣。我們有數(shù)十年的靜態(tài)價(jià)值觀適得其反的經(jīng)驗(yàn)。所以你真的應(yīng)該保留實(shí)例變量。
另一種方法是添加工廠方法。如果實(shí)例需要設(shè)置,而您不能讓普通程序員使用您的代碼,則通常會(huì)使用它們。您甚至可以通過(guò)同時(shí)擁有公共構(gòu)造函數(shù)和實(shí)例工廠方法來(lái)稍微打破該模式。如果您使用工廠方法,共享的東西將從它們調(diào)用的實(shí)例中復(fù)制過(guò)來(lái)。如果您使用公共構(gòu)造函數(shù),則會(huì)創(chuàng)建一個(gè)新的共享事物。
- 2 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)