泛型类与泛型方法

A. *_*esa 5 c# generics

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

// 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)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到有关两者之间差异的任何提示。

这两个选项如何比较?会有什么区别吗?在评估设计时是否有任何值得注意的地方需要牢记?

Hay*_*tam 6

我立刻就能想到一个区别:

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

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