这不起作用:
public interface IServerFuncs
{
Table<T> getTable<T>() where T : MasterClass;
//*cut* other stuff here
}
public class DefaultFuncs<T> : IServerFuncs where T : MasterClass
{
Table<T> table;
public DefaultFuncs(Table<T> table)
{
this.table = table;
}
public Table<T> getTable()
{
return table;
}
}
它是DefaultFuncs<T>' does not implement interface member 'IServerFuncs.getTable<T>()'
但我也不能这样做:
public Table<T> getTable<T>() where T:MasterClass
{
return table;
}
它是Error: Cannot implicitly convert type 'MySQLCache.Table<T>
。我猜方法中的T与DefaultFuncs<T>
冲突,所以我尝试了:
public Table<T2> getTable<T2>() where T2:MasterClass
{
return table;
}
但它又出现了另一个错误:Error Cannot implicitly convert type 'Table<T>' to 'Table<T2>'
我需要在不向IServerFuncs
(IServerFuncs<T>
)添加通用类型的情况下实现此功能..任何想法?
答案 0 :(得分:1)
如果不在界面中添加模板修改器,我认为你不能这样做,否则你可以这样做:
public class MC1 : MasterClass
{
}
public class MC2 : MasterClass
{
}
IServerFuncs df = new DefaultFuncs<MC1>(new Table<MC1>());
Table<MC2> table = df.getTable<MC2>(); // obviously not correct.
基本上,为了保证接口和实现使用相同的类型,您需要将限定符添加到接口定义中:
public interface IServerFuncs<T> where T : MasterClass
{
Table<T> getTable();
//*cut* other stuff here
}
public class DefaultFuncs<T> : IServerFuncs<T> where T : MasterClass
{
Table<T> table;
public DefaultFuncs(Table<T> table)
{
this.table = table;
}
public Table<T> getTable()
{
return table;
}
}
答案 1 :(得分:1)
你可以做到
public Table<T2> getTable<T2>() where T2:MasterClass
{
return (Table<T2>)(object)table;
}
如果您知道T和T2将始终是相同的类型。如果不是,您将获得运行时异常。