【发布时间】:2019-07-23 16:15:28
【问题描述】:
以下代码有效:
public class Converter<T,M> : CustomCreationConverter<M>
where T : new()
where M : class
但是,这是我想做的:
public class Converter<T,M> : CustomCreationConverter<M>
where T : new()
where M : interface
是否有可能与此等价?
指定可以将 T 转换为 M 的约束在我的特定情况下也足够了。
为了澄清,我不是在寻找使T实现一些特定接口的能力。
有人可能会尝试将此问题标记为“Force generic interface implementation in C#”的重复问题。以下是我认为不值得将我的问题标记为重复的原因:
- 这个问题已经超过 8 年了
- 当发布答案的人发现发布问题的人实际上想知道如何实现特定接口时,问题就解决了
- 如果通过约束无法做到这一点,则可能有解决方法
我尝试这样做的原因是因为我尝试使用 Json.NET's JsonConverter Class 创建多个自定义 JSON 转换器。
public class Converter<T,M> : CustomCreationConverter<M>
where T : new()
{
public override bool CanRead => base.CanRead;
public override bool CanWrite => base.CanWrite;
public override bool CanConvert(System.Type objectType)
{
return base.CanConvert(objectType);
}
public override M Create(System.Type objectType)
{
return new T(); //Cannot implicity convert type 'T' to 'M'
}
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer)
{
return base.ReadJson(reader, objectType, existingValue, serializer);
}
public override string ToString()
{
return base.ToString();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
base.WriteJson(writer, value, serializer);
}
}
我可以为我需要转换器的每个课程执行上述操作或public class MyClassConverter : CustomCreationConverter<IMyClass>{}。只是想保持干燥!
【问题讨论】:
-
类型是类还是接口为什么重要?我的意思是,知道它为什么重要可能会告诉我们您希望利用这些知识完成什么,我们可能会更好地提出适当的替代方案。
-
泛型中的约束是为了实现一个功能,在遵守点规则之前它们来自哪里有什么关系。您还没有解释接口在您的情况下实现了什么具体的事情
标签: c# generics interface polymorphism