我有一個功能,像這樣:我可以使用通用約束來啓用參數化構造函數嗎?
public List<T> SelectAll<T>() where T : DatabaseObject, new()
{
List<T> retVal = new List<T>();
String command = "Select * from " + GetType().Name;
MySqlCommand cmd = DatabaseRunner.GetCommand(command);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
T newObj = new T(reader);
}
return retVal;
}
你可以看到,當我嘗試創建一個新的T
對象,我傳遞一個MySqlDataReader
對象的構造函數。我如何修改方法簽名來允許這個?
你可以欺騙,令T貫徹含有創建一個新的T和一個帶有參數的單一工廠方法的接口。那種醜陋,但它擊敗IMO的反映。 – harold