ram*_*ram 6 c# generics interface generic-interface
这是我的代码
public interface ITranslator<E, R>
{
E ToEntity<T>(R record);
}
class Gens : ITranslator<string, int>
{
#region ITranslator<string,int> Members
public string ToEntity<MyOtherClass>(int record)
{
return record.ToString();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我收到一个错误 Type parameter declaration must be an identifier not a type
为什么我不能ToEntity<MyOtherClass>但只能拥有ToEntity<T>?
编辑:正在MyOtherClass做什么?我在多个表/类之间转换实体(相当于实体框架的POCO)和记录(框架返回的对象).所以我想用它来进行我的类特定转换
你的接口有一个通用的ToEntity<T>,你已经取得了你的实现类的非泛型方法Gens的ToEntity<MyOtherClass>.(泛型方法可以采用任何类型参数,可能给出某些约束T.您的Gens类试图ToEntity 仅为类型参数MyOtherClass提供定义,这违背了泛型的目的.)
在您的代码示例中,不清楚您的Gens类是如何尝试使用该MyOtherClass类型的; 它当然没有参与逻辑ToEntity.我们需要更多信息才能为您提供更多指导.
为了说明,这是您当前ITranslator<E, R>界面的定义,用简单的英语:
"我提供了一种机制,可以将任何类型的记录转换为类型
R的实体E,这种机制依赖于任何用户指定的类型T."
Gens另一方面,你的课程,它目前设计的方式,"实现"上述界面,如下所示:
"我可以将整数转换为字符串.我提供了允许用户指定类型来控制如何执行此转换的错觉,但实际上没有类型的选择.
MyOtherClass类是以某种方式涉及的;这就是我所能说的. "
从这两个描述中可以清楚地看出,Gens该类并没有真正做到ITranslator<E, R>界面所保证的.也就是说,它不愿意为其ToEntity方法接受用户指定的类型.这就是为什么这段代码不能为你编译的原因.
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |