请考虑以下代码:
public interface ImyInterface
{
T GetEntity<T>(T t,int MasterID);
}
我声明了一个类名:MyEntity
,它有一个名为A_1
的属性
public class BL_Temp : ImyInterface
{
public MyEntity GetEntity<MyEntity>(MyEntity t, int MasterID)
{
t.A_1 = ""; //Error
return t;
}
}
错误是:
'MyEntity'不包含'A_1'的定义,并且没有可以找到接受类型'MyEntity'的第一个参数的扩展方法'A_1'(你是否缺少using指令或汇编引用?)
是否可以在非泛型接口中声明泛型方法?
我的错误在哪里?
感谢
EDIT1)
考虑MyEntity
声明是:
public class MyEntity
{
public string A_1 {set; get;}
}
答案 0 :(得分:11)
您可以声明,但您的方法将是通用的,而不是特定类型。我的意思是MyEntity
是通用参数,它不是您的实体类型。
您可以像这样向您的实体添加约束,这样您就可以访问Entity
个特定成员..
public interface ImyInterface
{
T GetEntity<T>(T t,int MasterID) where T : Entity;
}
public class BL_Temp : ImyInterface
{
public T GetEntity<T>(T t, int MasterID) where T : Entity
{
t.MyEntityProperty = "";
return t;
}
}
我知道这是一个示例代码,但我觉得值得一提的是你的方法不应该是。方法名称是GetEntity
,但它会改变客户端可能不知道的参数(我说它撒了谎)。 IMO你应该至少重命名方法或不要改变参数。
答案 1 :(得分:1)
即使您拥有课程MyEntity
,也请参阅此代码
public MyEntity GetEntity<MyEntity>(MyEntity t, int MasterID)
MyEntity
被视为通用参数。看起来你想要实现通用专业化。如果是这样,请阅读:How to do template specialization in C#