我有一个泛型类,我正在尝试实现隐式类型转换。虽然它主要是工作的,但它不适用于界面转换。经过进一步研究,我发现有一个编译器错误:“用户自定义的转换从界面”应用。虽然我知道在某些情况下应该强制执行,但我想做的似乎是一个合法的案例。
下面是一个例子:
public class Foo<T> where T : IBar
{
private readonly T instance;
public Foo(T instance)
{
this.instance = instance;
}
public T Instance
{
我有一个类不实现接口,但它需要实现。我无法更改类本身,因此我希望创建一个从ClassA到IInterface的隐式运算符。这不能通过设计来完成(我得到的信息是:“用户定义的转换到界面”)。所以我想为它创建一个适配器,如下所示:
public interface IInterface
{
void Method();
}
public class ClassA
{
public void Implementation()
{
}
}
public class ClassAT
请看。我正在尝试创建一个数据存储的接口。原因:我不想在开发过程中依赖于一个真正的postgres db,但是我想在开发过程中使用内存中的实现。
只要我在main()中创建实例,它就能工作。例如:db := store.NewMemoryDB()或db := store.NewDB()。
但是现在我想要创建一个基于布尔值的实例。所以我在商店包中创建了一个函数。这适用于postgres实现,但不适用于内存中的实现。我得到以下错误:cannot use NewMemoryDB() (type *MockDB) as type *DB in assignment。现在我真的不知道怎么解决这个问题。谁能
List<String> list = ( () -> new LinkedList<String>() )();
上面的代码引发了以下代码:Multiple non-overriding abstract methods found in interface java.util.List。
这个错误是什么意思?
我想在返回时自动将值包装在通用容器中(我知道这并不总是可取的,但对我的情况来说是有意义的)。例如,我想写:
public static Wrapper<string> Load() {
return "";
}
通过将以下内容添加到包装类中,我就能够做到这一点:
public static implicit operator Wrapper<T>(T val) {
return new Wrapper<T>(val);
}
不幸的是,当我试图转换一个IEnumerable、这里的完整代码(和)时,这失败了:
public c