c# - 泛型类与泛型方法

标签 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)
    {
        ...
    }
}

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

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

最佳答案

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

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

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

关于c# - 泛型类与泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52181120/

相关文章:

c# - ServiceStack.DataAnnotations 缺少属性定义?

C# make 文件无法编辑和删除

c# - Bing map 旋转

java - 泛型类中的泛型静态方法

c# - 在 MEF 2 中使用封闭类型组合开放通用类型

c# - 如何处理 C# .NET GET/POST?

c# - MVVM ViewModel 和静态方法

java - 泛型集合 "Cannot instantiate the type ArrayList<? extends OpDTO> "

java - apache-commons collectionutils 源代码

Java 泛型未经检查强制转换警告 : abstract class A<T extends A>