2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
我個(gè)人只是在構(gòu)造函數(shù)中初始化字段:
public class Service
{
private readonly DinnerRepository repo;
private readonly Dinner dinner;
public Service()
{
repo = new DinnerRepository();
dinner = repo.GetDinner(5);
}
}
請(qǐng)注意,這與您在問題底部顯示的代碼不同,因?yàn)檫@只是聲明局部變量。如果只需要局部變量,那很好-但是,如果需要實(shí)例變量,則使用上面的代碼。
基本上,字段初始值設(shè)定項(xiàng)的功能有限。根據(jù)C#4規(guī)范的10.5.5.2節(jié):
實(shí)例字段的變量初始化器無法引用正在創(chuàng)建的實(shí)例。因此,this在變量初始值設(shè)定項(xiàng)中引用是編譯時(shí)錯(cuò)誤,因?yàn)閷?duì)于變量初始值設(shè)定項(xiàng)通過simple-name引用任何實(shí)例成員都是編譯時(shí)錯(cuò)誤。
(“因此”和“因此”在我看來是錯(cuò)誤的方式-通過簡(jiǎn)單名稱引用成員是非法的,因?yàn)樗胻his-我將對(duì)其進(jìn)行ping Mads-但這基本上是相關(guān)的部分。)

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
即使可以保證初始化表達(dá)式按“文本順序”執(zhí)行,實(shí)例字段初始化程序也無法訪問該this引用,并且您在其中隱式使用了該引用。
Dinner dinner = repo.GetDinner(5);
相當(dāng)于
Dinner dinner = this.repo.GetDinner(5);
恕我直言,最佳實(shí)踐是將字段初始化保留為常量值或簡(jiǎn)單new語句。任何比該多的東西都應(yīng)該交給構(gòu)造函數(shù)。
- 2 回答
- 0 關(guān)注
- 270 瀏覽