【问题标题】:C# generic class and overridden methodC# 泛型类和重写方法
【发布时间】:2013-01-01 08:51:54
【问题描述】:

我有一个要重写的方法:

public override bool CanConvert(Type objectType)

(注意:我不能修改超类。)无论如何,在这个被覆盖的方法中我想做:

return typeof(MyClass<T, I>).IsAssignableFrom(objectType);

MyClass 是抽象的。我自己写的。

Intellisense 强调通用部分。所以我必须使方法通用。但是方法签名与覆盖不兼容。

我该怎么办?

编辑:

我的班级:

MyClass<T,I> where T : MyClass<T,I>

编辑 2:

包含方法的类:

public class ReferencesJsonConverter : JsonConverter

需要添加吗

<T,I>

到 ReferencesJsonConverter?这是不幸的,因为这个类是这样使用的:

[JsonConverter(typeof(ReferencesJsonConverter))]
public virtual WhateverClass whateverclass {get;set;}

T 是WhateverClass...

我也有这个方法需要重写

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)

我想做:

var e = value as MyClass<T, I>;

在那里。所以我想我真的需要添加

<T,I>

到班级本身?

【问题讨论】:

  • 我认为它应该对您有所帮助 [链接 1][1] [链接 2][2] [1]:stackoverflow.com/questions/1349227/… [2]:stackoverflow.com/questions/9197384/…
  • 看起来MyClass&lt;T,I&gt; 不是包含CanConvert 的类型,因为您提到了一个超类。您能否显示包含您对CanConvert 的覆盖的类的声明?具体来说,该类是否具有(至少)两个类型参数,称为TI

标签: c# class generics overriding


【解决方案1】:

以下代码正在编译中:

public abstract class MyBaseClass
{
    public virtual bool CanConvert(Type objectType)
    {
        return false;
    }
}

public abstract class MyClass<T,I> : MyBaseClass
    where T : MyClass<T,I>
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(MyClass<T, I>).IsAssignableFrom(objectType);
    }
}

如您所见,无需将方法 CanConvert 设为通用。

我认为错误的实际原因是您在问题中没有提到的其他原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多