0

我有一个要覆盖的方法:

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 是任何类...

我也有这个方法需要重写

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

我想要做:

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

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

<T,I>

到班级本身?

4

1 回答 1

0

以下代码正在编译良好:

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设为通用。

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

于 2013-01-01T09:12:42.293 回答