这是非常简单的事情我确定,但是当谈到接口时我很难理解继承malarky。
鉴于以下类,如何在特定于Parent类的接口中连接Get方法,而不重写基本方法?
public class Base<T, T2>
{
public T Get<T, T2>(string key)
{
...
}
}
public class Parent : Base<Type1, Type2>, IParent
{
...
}
这是我的atm,但我一直得到一个“inteface成员Type1 IParent.Get(string)未实现”错误。
public interface IParent
{
Type1 Get(string key);
}
答案 0 :(得分:5)
public T Get<T, T2>(string key)
将在泛型类上创建泛型方法。 T
和T2
将成为此通用方法的参数,与类T
和T2
无关。
只需将其public T Get(string key)
。
答案 1 :(得分:2)
T Get<T,T2>(string)
的{{1}}方法和Base<T,T2>
的方法Type1 Get(string)
方法是两种不同的方法签名。你需要实现这两个。如果您希望两种实现都使用相同的功能,则可以执行以下操作:
IParent
但我相信您的原意并不是参数化public class ParentJ : Base<Type1, Type2>, IParent {
public Type1 Get(string key) {
return this.Get<Type1,Type2>(key);
}
}
中的Get()
方法,因此您可以这样写Base<T,T2>
:
Base
该签名将满足public class Base<T,T2> {
public T Get(string key) {
// implementation here
}
}
中的方法签名。
当类型无法或不应由包含该方法的类推断时,您只需要对方法输入类型参数(例如IParent
和T
。
答案 2 :(得分:2)
匹配方法时,此签名必须完全匹配。签名的一个组成部分是泛型参数的数量。
您的IParent
接口包含一个方法Get
,其中包含零类型参数。您的Base
类包含一个方法Get
,其中包含两个类型参数。
虽然看起来Base.Get
共享其类型参数,但它没有,所使用的语法会创建两个新的类型参数,这些参数会影响类的类型参数。
修复方法是在Get
中简单地实现一个没有任何类型参数的Parent
方法。
答案 3 :(得分:1)
试试这个。您不会覆盖基础Get
,而是实施IParent
。
public class Type1 { }
public class Type2 { }
public interface IParent
{
Type1 Get(string key);
}
public class Base<T, T2>
{
public T Get(string key)
{
return default(T);
}
}
public class Parent : Base<Type1, Type2>, IParent
{
}
答案 4 :(得分:0)
尝试使用通用IParent接口。