c# T 的实例

标签 c# .net generics

我试图制作一个通用代码来序列化和反序列化任何实现特定接口(interface)的对象。问题是我需要在调用 .Deserialize() 之前创建一个对象的实例,因为您不能在接口(interface)中使用静态函数。现在我的问题是如何制作 T 的实例?还是有更好的方法来实现我的目标?

public static class Serializer
{
    public static byte[] Serialize<T>(T Obj) where T : Data;
    public static T Deserialize<T>(byte[] Data) where T : Data
    {
        //Here I need to something like:  new T().Deserialize(Data);
    }
}
public interface Data
{
    public byte[] Serialize<T>(T obj);
    public T Deserialize<T>(byte[] Data);
}
class Program
{
    static void Main(string[] args)
    {
        Serializer.Deserialize<Dummy>(new byte[20]);
    }
}
class Dummy : Data
{

}

最佳答案

更新 修正了代码/拼写错误

使用new()关键字

public interface IData
{
    public byte[] Serialize<T>(T obj);
    public T Deserialize<T>(byte[] Data);
}
public static class Serializer
{
    public static byte[] Serialize<T>(T Obj) where T : IData;
    public static T Deserialize<T>(byte[] data) where T : IData, new()
    {
        T res=new T();
        res.Deserialize<T>(data);
        return res;
    }
}
class Program
{
    static void Main(string[] args)
    {
        Serializer.Deserialize<Dummy>(new byte[20]);
    }
}
class Dummy : IData
{

}

关于c# T 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993324/

相关文章:

c# - 包含 Entity Framework 的通用 Find()

c# - 检查文件是否存在于指定目录

c# - 在 JSON.NET 中反序列化此对象

c# - 需要时髦的 LINQ(第 2 部分)

java - 为什么扩展 String 的参数类型不能像 String 一样使用

c# - 基于 <T> 类型在运行时动态创建 lambda 谓词

c# - 在 C# 中,是否可以限制类对定义它的文件的可访问性?

c# - 在 C# 中使用 LSH 进行近似最近邻搜索

.net - 如何通过Powershell检查交换邮箱?

C# WPF 程序在调试中运行,但不调试就无法发布