これに似た工場があるとしましょう:
public static class BusinessObjectFactory
{
public static T Create<T>(int objectId) where T : BusinessObject, new()
{
var dataSource = DataLayer.DataSources.Repository.Get<T>();
var serializer = DataLayer.Serializers.Repository.Get<T>();
var businessObject = new T {ObjectId = objectId, DataSource = dataSource, Serializer = serializer};
return businessObject;
}
}
これは、ObjectId、DataSource、Serializerのパブリックアクセサーがあれば機能します。
TがBusinessObjectとして制約されており、BusinessObjectにはその種のコンストラクターがあることを知っているので、タイプTコンストラクターでこれらの引数を指定したいと思います。
新しいTへの呼び出しを次のようなものに置き換えることができることを私は知っています。
var businessObject = (T) Activator.CreateInstance(typeof (T), objectId, dataSource, serializer);
しかし、私のTコンストラクターがパラメーターなしでなければならない技術的な理由は何ですか?ジェネリックについてはわからないことがある気がします。そのトピックに関連するいくつかの質問がSOに浮かんでいるのを見てきましたが、本当に私を啓発した答えはありません。