2013-01-01 104 views
0

我有我要重寫的方法:C#泛型類和重寫的方法

public override bool CanConvert(Type objectType) 

(注:我不能修改超類。)無論如何,在此重寫的方法我想做的事:

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

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

智能感知強調了通用部分。所以我必須使該方法具有通用性。但是,方法簽名與覆蓋不兼容。

我該怎麼辦?

編輯:

MyClass的:

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

編輯2:

包含類方法:

public class ReferencesJsonConverter : JsonConverter 

我是否需要添加

<T,I> 

to 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> 

給班級本身?

+0

我認爲它應該幫助你 [鏈接1] [1] [鏈接2] [2] [1]:http://stackoverflow.com/questions/1349227/c-sharp -abstract-generic-method [2]:http://stackoverflow.com/questions/9197384/overriding-abstract-generic-method-from-non-generic-class –

+0

看起來像'MyClass '不是類型包含'CanConvert',因爲你提到了一個超類。你能否顯示包含你的'CanConvert'的覆蓋的類的聲明?具體來說,該類是否具有(至少)兩個類型參數,稱爲'T'和'I'? – stakx

+0

Plz請參閱鏈接 –

回答

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是通用的。

我假設錯誤的實際原因是你在問題中沒有提到的其他東西。