首页 > 解决方案 > 泛型类与泛型方法

问题描述

我正在设计一个能够反序列化某些文件的类,我想知道这两个选项的含义是什么:

// option 1 - generic class
public class XmlConfigurationManager<T>
{
    public T ReadConfigurationAndWriteDefault(string configurationPath, Func<T> defaultConfiguration)
    {
        ...
    }

    public T Deserialize(string configurationPath)
    {
        ...
    }
}

// option 2 - generic methods in non generic class
public class XmlConfigurationManager
{
    public T ReadConfigurationAndWriteDefault<T>(string configurationPath, Func<T> defaultConfiguration)
    {
        ...
    }

    public T Deserialize<T>(string configurationPath)
    {
        ...
    }
}

我似乎找不到任何关于两者之间差异的暗示。

这两个选项如何比较?会有什么不同吗?在评估设计时,有什么值得注意的地方需要记住吗?

标签: c#generics

解决方案


我马上就能想到一个区别:

  • 通用类:您必须为要反序列化的每种类型的文件实例化具有某种类型的对象。尽管如果您长期使用实例,您将能够保留特定于类型的参数。
  • 泛型方法:您将实例化该类一次,并将泛型方法用于您想要的任意数量的类型(假设您将处理类型的差异,如果有的话)。

例如,如果您想简单地将文件 (json) 的内容反序列化为对象,则泛型方法就足够了,因为所需的类型不会改变任何内容。


推荐阅读