C# .net泛型约束和对象继承编译问题

C# .net泛型约束和对象继承编译问题,c#,.net,generics,inheritance,polymorphism,C#,.net,Generics,Inheritance,Polymorphism,我有以下情况。此代码将引发Test2的编译器错误 类型“InheritedChild”不能用作泛型类型或方法“PanelGenericoGrid”中的类型参数“T”。没有从“InheritedChild”到“SerializerBase”的隐式引用转换 公共类序列化数据库 { } 公共类DirectChild:SerializerBase { } 公共类InheritedChild:DirectChild { } 公共类PanelGenericyGrid:UserControl 其中T:

我有以下情况。此代码将引发Test2的编译器错误

类型“InheritedChild”不能用作泛型类型或方法“PanelGenericoGrid”中的类型参数“T”。没有从“InheritedChild”到“SerializerBase”的隐式引用转换

公共类序列化数据库
{  
}
公共类DirectChild:SerializerBase
{ 
}
公共类InheritedChild:DirectChild
{ 
}
公共类PanelGenericyGrid:UserControl
其中T:SerializerBase,new()
{
}
...
板栅试验;
panelgenericiogridest2;
...
我确信我的建议是错误的。我希望在以下情况下,DirectChild和InheritedChild都将其适当的类型赋予SerializerBase构造函数

如何使代码按其需要的方式工作?谢谢

一些关于实际信息的信息。SerializerBase有一组静态函数,这些函数实现为根据类型自动序列化和反序列化它们自己

DirectChild有一组字符串,这些字符串将存储在磁盘上并进行恢复

InheritedChild拥有DirectChild的所有成员以及更多成员


基本上,我需要DirectChild.Serialize(文件名)和IndirectChild.Serialize(文件名),其中Serialize是SerializeBase的公共成员

问题是,
InheritedChild
没有实现
SerializerBase
,因此它不满足
PanelGenericoGrid
t
的约束

不幸的是,我们不清楚解决方案的目的是什么,因为我们不知道您想要实现什么


在现实生活中,
SerializerBase
的成员是什么?如果您能给我们提供更多的上下文,它将帮助我们帮助您。

问题是
InheritedChild
没有实现
SerializerBase
,因此它不满足
panelgeneriicogride
t
的约束

不幸的是,我们不清楚解决方案的目的是什么,因为我们不知道您想要实现什么


在现实生活中,
SerializerBase
的成员是什么?如果您能给我们提供更多的上下文,这将有助于我们帮助您。

在我看来,您缺少一个接口:

public interface ISerializerBase<T> { }
public class SerializerBase<T> : ISerializerBase<T> { } 
public class DirectChild : SerializerBase<DirectChild> { }
public class InheritedChild : DirectChild, ISerializerBase<InheritedChild> { } 
public class panelGenericIOGrid<T> where T: ISerializerBase<T>, new() { } 

您是执行二进制序列化,还是将其序列化为XML?

在我看来,您缺少一个接口:

public interface ISerializerBase<T> { }
public class SerializerBase<T> : ISerializerBase<T> { } 
public class DirectChild : SerializerBase<DirectChild> { }
public class InheritedChild : DirectChild, ISerializerBase<InheritedChild> { } 
public class panelGenericIOGrid<T> where T: ISerializerBase<T>, new() { } 

您是执行二进制序列化,还是将其序列化为XML?

我认为接口是最好的方式。这将是一些额外的代码,但由于BaseSerializer中的每个方法都是静态的,所以不会有太多额外的工作。谢谢如果每个方法都是静态的,我认为您应该真正使用mixin方法。。。。继承在这种情况下没有意义,因为接口中不能有静态方法,也不能用静态方法实现接口方法。我认为接口是最好的方法。这将是一些额外的代码,但由于BaseSerializer中的每个方法都是静态的,所以不会有太多额外的工作。谢谢如果每个方法都是静态的,我认为您应该真正使用mixin方法。。。。在这种情况下,继承没有意义,因为接口中不能有静态方法,也不能用静态方法实现接口方法。
public interface MSerializable {}
public static class Serializable {
  public static void Serialize(this MSerializable self, string fileName) { 
    // self will refer to the right type, 
    // no need to use generics if all you want is to serialize it ...
  }
}

public class DirectChild : MSerializable { }
public class InheritedChild : DirectChild { } 
public class panelGenericIOGrid<T> where T: MSerializable, new() { }