我在下面有下列情況。此代碼將爲Test2引發編譯器錯誤.net通用約束和對象繼承編譯問題
類型'InheritedChild'不能用作泛型類型或方法'panelGenericIOGrid'中的類型參數'T'。沒有從'InheritedChild'到'SerializerBase'的隱式引用轉換。
public class SerializerBase<T>
{
}
public class DirectChild : SerializerBase<DirectChild>
{
}
public class InheritedChild : DirectChild
{
}
public class panelGenericIOGrid<T> : UserControl
where T: SerializerBase<T>, new()
{
}
...
panelGenericIOGrid<DirectChild> test;
panelGenericIOGrid<InheritedChild> test2;
...
我相當確信我的實現是真實的錯誤。我想要以下情況,DirectChild和InheritedChild都會將它們的適當類型賦予SerializerBase構造函數。
如何讓代碼按照需要的方式工作?謝謝!
關於實際信息的一些信息。 SerializerBase有一組靜態函數,可以根據它們的類型自動序列化和反序列化自己。
DirectChild有一組將被存儲在磁盤上並被恢復的字符串。
Inhertiedchild擁有DirectChild的所有成員加上更多。
基本上我會需要DirectChild.Serialize(文件名),並IndirectChild.Serialize(文件名),其中序列化是SerializeBase
我認爲界面是最好的方法。它將會是一些額外的代碼,但由於BaseSerializer中的每個方法都是靜態的,所以它不需要額外的工作。謝謝! – greggorob64 2010-08-09 18:28:06
如果每種方法都是靜態的,我認爲你應該真正使用mixin方法....在這種情況下繼承沒有意義,因爲你不能在接口中使用靜態方法,並且你不能使用靜態方法實現接口方法那些。 – 2010-08-09 18:30:18