我注意到,.NET框架中的几个内置类/方法采用了System.Type的参数,在我看来,使用泛型会更干净。
例如,要创建一个DataContractSerializer实例,我需要编写

var s = new DataContractSerializer(typeof(MyCustomClass));

代替
var s = new DataContractSerializer<MyCustomClass>();

我不是要辩论哪种方法是“最佳”方法,我只是好奇地想知道是否有任何好的理由可以选择哪种方法。 :)

其他示例(摘自我的脑海)是:
-System.Xml.Serialization.XmlSerializer(构造函数)
-System.ServiceModel.ServiceHost(构造函数和几个方法)
-System.Web.Mvc.ModelBinderAttribute

最佳答案

示例中的前两个类XmlSerializer和ServiceHost是在泛型存在之前设计的。据推测,微软可以为处理泛型的这些类发明替代品,但这还没有发生。

泛型通常不是必需的:如果方法的签名不依赖于类型,则无论它们传递typeof(MyCustomClass)还是调用Method<MyCustomClass>都不会对调用者造成任何影响。拥有System.Type参数通常会更有用:如果您正在编写自己的反射代码,则无论如何通常都将拥有System.Type。如果您只有System.Type,那么调用通用方法就困难得多。

10-02 02:35
查看更多