C#泛型类和重写方法

时间:2013-01-01 08:51:55

标签: c# class generics override

我有一个我想覆盖的方法:

public override bool CanConvert(Type objectType)

(注意:我无法修改超类。)无论如何,在我想要做的这个重写方法中:

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

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

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

我该怎么办?

编辑:

MyClass的:

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 个答案:

答案 0 :(得分: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成为通用的。

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