我遇到过很多情况,我声明了一个泛型接口,后来我需要这个接口的非泛型版本,或者至少该接口上的一些方法或属性的非泛型版本。我通常会声明一个新的非泛型接口,并让它继承泛型接口。我在中遇到的问题显示在下面的示例中:
public abstract class FormatBase { }
public interface IBook<F> where F : FormatBase
{
F GetFormat();
}
public interface IBook
{
object GetFormat();
}
public abstract class BookBase : IBook<FormatBase>, IBook
{
public abstract FormatBase GetFormat();
object IBook.GetFormat()
{
return GetFormat();
}
}既然声明IBook (非泛型)接口的唯一方法是显式,那么你们该如何让它变得抽象呢?
发布于 2012-07-13 23:15:54
为什么你不能写显式接口的实现,而是声明它是抽象的呢?
public abstract class BookBase : IBook<FormatBase>, IBook
{
public abstract FormatBase GetFormat();
object IBook.GetFormat()
{
return GetFormat();
}
}发布于 2012-07-13 23:07:57
只需委派:
public abstract class BookBase : IBook<FormatBase> {
public abstract FormatBase GetFormat();
object IBook.GetFormat() {
return GetFormat();
}
}或者,如果您仍然希望区分这两种方法,请委托给一个新方法:
public abstract class BookBase : IBook<FormatBase> {
public abstract FormatBase GetFormat();
public abstract object IBook_GetFormat();
object IBook.GetFormat() {
return IBook_GetFormat();
}
}您还需要new来避开“隐藏继承的成员”警告:
public interface IBook<F> : IBook
where F : FormatBase {
new F GetFormat();
}此外,让具体类决定具体的FormatBase可能更有意义。
public abstract class BookBase<F> : IBook<F>
where F : FormatBase {
public abstract F GetFormat();
object IBook.GetFormat() {
return GetFormat();
}
}https://stackoverflow.com/questions/11473084
复制相似问题