gpt4 book ai didi

c# - 实现缺少新约束的通用接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 21:08:01 27 4
gpt4 key购买 nike

考虑以下接口(interface):

public interface IFoo
{
M Bar<M>();
}

尝试用

实现
class Foo : IFoo
{
public M Bar<M>()
{
return new M();
}
}

不起作用,编译器提示 M 缺少 new() 约束。

当我添加约束时

class Foo : IFoo
{
public M Bar<M>() where M : new()
{
return new M();
}
}

这仍然无法解决问题,因为 Foo.Bar 的约束现在与接口(interface)方法的约束不匹配(我无法更改它)。

documentation for the compiler error CS0425

To avoid this error, make sure the where clause is identical in both declarations, or implement the interface explicitly.

如果“显式实现接口(interface)”是解决方案:我该怎么做?

最佳答案

如果您不能更改接口(interface)定义,则必须避免使用 new M(); - 使用 Activator.CreateInstance相反:

class Foo : IFoo
{
public M Bar<M>()
{
return Activator.CreateInstance<M>();
}
}

当然,如果 M 没有无参数构造函数,您现在可能会遇到运行时错误,但这是不可避免的(同样,因为我们无法更改通用约束)。


回复:文档:

implement the interface explicitly.

认为他们在这里试图达到的目的是“如果你有一个具有一组通用约束的基类方法并且你想实现一个具有具有相同名称的方法的不同约束集,显式实现是摆脱该绑定(bind)的一种方式。

关于c# - 实现缺少新约束的通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com