構造函數按從上到下的順序執行I.E.基地的第一個,然後派生一個。這種安排基於一個重要的OOP保證,即一個對象(在這裏是基礎)必須在它可以被使用之前被初始化(這裏是派生類的構造函數)。爲什麼派生類的字段初始值設定項在基類的初始化符之前執行
我想知道爲什麼字段初始值設定項在C#中不遵循這個原則?我在這裏錯過了什麼嗎?
我也遇到了這個原理與字段初始值設定項的用處。我有一個返回Identity對象的屬性的基類。每個派生類都有自己的存儲庫字段,我已經使用字段初始值設定項(使用默認構造函數)進行了初始化。最近我已經決定存儲庫類也必須提供Identity對象,所以我在存儲庫構造函數中引入了一個額外的參數。但我堅持要找出:
public class ForumController : AppControllerBase
{
ForumRepository repository = new ForumRepository(Identity);
// Above won't compile since Identity is in the base class.
// ... Action methods.
}
現在我只剩一個選擇那就是我的每一個控制器,一個默認的構造豐滿只能做身份庫對象的初始化的工作。
不,它沒有編譯的原因根本就不在於'Identity'在基類中,只是因爲它是一個實例成員。所以,標題中的問題與你想要做的事無關...... – Guffa