从PHP到C#,这种语法令人生畏:
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},T,T.name); } } public class Customer {}}//OUTPUT://Type=TestGenericParameter.Customer,dummy=test,name of class=Customer//Type=TestGenericParameter.Customer,name of class=Customer解决方法 主要原因是编译时的类型安全性.如果要传递两个Type对象,则将责任放在开发人员而不是编译器上.
这也是许多IoC容器利用它的原因,因为如果具体类型没有继承抽象类型,编译器会抱怨.
public voID Register<TAbstract,TConcrete>() where TConcrete : TAbstract{}
此代码仅在TConcrete实现或继承TAbstract时有效.如果此方法采用两个Type参数,则您的方法应验证此关系.
总结以上是内存溢出为你收集整理的c# – 在方法签名中使用泛型有什么好处?全部内容,希望文章能够帮你解决c# – 在方法签名中使用泛型有什么好处?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)