考虑使用类库项目的 VS 2010 解决方案,我们将其命名为ClassLibrary
。在这个项目中,我们有以下类型:
namespace ClassLibrary
{
public interface IFooable<T> where T : struct
{
T Foo(T value);
}
public struct Blah : IFooable<Blah>
{
public static Blah Foo(Blah blah1, Blah blah2)
{
throw new NotImplementedException();
}
Blah IFooable<Blah>.Foo(Blah value)
{
return Blah.Foo(this, value);
}
private void ForceBlahAccessorCreation()
{
throw new NotImplementedException();
}
}
}
现在我还在解决方案中添加测试项目,我正在使用测试向导为我的单元测试创建一些管道。在这个管道中,向导创建了一个有用的Blah_Accessor
类型,它允许我访问Blah
的私有静态和实例方法,字段,属性等,这非常方便。
问题是,使用上面显示的代码,当我尝试构建测试项目时,我将得到以下编译时错误:
来自程序集'ClassLibrary_Accessor的类型'ClassLibrary.Blah_Accessor'中的方法'Foo',Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'没有实现。
咦?
有人可以告诉我这个问题是否会在他们的VS 2010或任何其他VS版本中重现,以及为什么会发生这种情况?
更新:好的,我的印象是,使用静态方法和明确实现的具有相同名称(Foo
)的接口方法可能是问题,但这不是案子。即使它只是明确实现的IFooable.Foo
方法,我也会收到错误。
更令人困惑的是,如果我选择从.NET Framework明确实现接口,我就不会收到任何错误:
public struct Blah : IEquatable<Blah>
{
public static bool Equals(Blah blah1, Blah blah2)
{
throw new NotImplementedException();
}
private void ForceBlahAccessorCreation()
{
throw new NotImplementedException();
}
bool IEquatable<Blah>.Equals(Blah other)
{
throw new NotImplementedException();
}
} //THE SOLUTION WILL COMPILE FINE
public struct Blah : IFooable<Blah>
{
Blah IFooable<Blah>.Foo(Blah value)
{
return Blah.Foo(this, value);
}
private void ForceBlahAccessorCreation()
{
throw new NotImplementedException();
}
} //TEST PROJECT WILL FAIL TO COMPILE