P.B*_*key 5 c# generics interface
放入default(T)一个界面. 明确地实现接口.结果无法编译
public interface IWhatever<T>
{
List<T> Foo(T BarObject = default(T));
}
public class ConcreteWhatever: IWhatever<ConcreteWhatever>
{
List<ConcreteWhatever> Foo(ConcreteWhatever BarObject = default(T)) {}
}
Run Code Online (Sandbox Code Playgroud)
我完全期待default(ConcreteWhatever).我得到的是default(T)导致编译错误的原因.
我只是进去替换default(T),null事情很好.但这很可怕.为什么会这样?
T在这种情况下,您没有,因为ConcreteWherever它不是通用类型.
如果你想,default(ConcreteWhatever)那就是你应该编写的代码.
您是否只是在抱怨Visual Studio自动生成的代码?如果是这样,这是一个合理的抱怨,但值得明确它...(请注意,你没有在这里使用显式接口实现 - 否则它将被声明为IWhatever<ConcreteWhatever>.Foo.你实际上没有正确的隐式实现,否则它应该公开...)
编辑:我自己尝试了同样的事情,并看到了相同的结果,除了方法是公开的.看起来这只是Visual Studio的一个错误 - 我建议你为它创建一个Connect请求.这是一个相对罕见的情况,我怀疑 - 创建一个通用接口,它指定一个可选参数,它使用类型参数的默认值作为值...