c#泛型类和重写方法

本文关键字:方法 重写 泛型类 | 更新日期: 2023-09-27 17:50:31

我想重写一个方法:

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 is WhateverClass…

我也有这个方法,我需要重写

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

我想做:

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

。所以我想我真的需要添加

<T,I>

到类本身?

c#泛型类和重写方法

下面的代码可以正常编译:

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设置为泛型。

我认为错误的真正原因是你在问题中没有提到的其他东西。