c# – 在方法签名中使用泛型有什么好处?

c# – 在方法签名中使用泛型有什么好处?,第1张

概述(感谢大家的答案, here is my refactored example,反过来关于单一责任原则的另一个StackOverflow问题.) 从PHP到C#,这种语法令人生畏: container.RegisterType<Customer>("customer1"); 直到我意识到它表达了同样的事情: container.RegisterType(typeof(Customer), "cus (感谢大家的答案,here is my refactored example,反过来关于单一责任原则的另一个StackOverflow问题.)

从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# – 在方法签名中使用泛型有什么好处?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存