(おかげで答えをみんな、here is my refactored example、単一責任の原則について順番に別のStackOverflowの質問。)メソッドシグネチャでジェネリックを使用する利点は何ですか?
のC#にPHPから来て、この構文は威圧された:
container.RegisterType<Customer>("customer1");
私が実現するまで
container.RegisterType(typeof(Customer), "customer1");
私は以下のコードで実証しています。
のでタイプを送信するときに、ジェネリック医薬品は、(例えばUnityと最もC#IoCコンテナ全体で)それだけでクリーンな構文であること以外、つまりあなたが(typeof演算を必要としない)ここで使用される理由は?いくつかの理由がありますか
using System;
namespace TestGenericParameter
{
class Program
{
static void Main(string[] args)
{
Container container = new Container();
container.RegisterType<Customer>("test");
container.RegisterType(typeof(Customer), "test");
Console.ReadLine();
}
}
public class Container
{
public void RegisterType<T>(string dummy)
{
Console.WriteLine("Type={0}, dummy={1}, name of class={2}", typeof(T), dummy, typeof(T).Name);
}
public void RegisterType(Type T, string dummy)
{
Console.WriteLine("Type={0}, dummy={1}, name of class={2}", T, dummy, T.Name);
}
}
public class Customer {}
}
//OUTPUT:
//Type=TestGenericParameter.Customer, dummy=test, name of class=Customer
//Type=TestGenericParameter.Customer, dummy=test, name of class=Customer
非常に便利だが、実装しようとすると、 "T obj = new T();"私に "変数型 'T'のインスタンスを作成できません。なぜなら、new()制約がないからです。"私は何が欠けていますか? –
あなたは私の答えのように制約を加える必要があります: 'public T CreateNew()T:new()' –