在 ISerialized 中,Resharper 抱怨“仅使用了 'SerializeShape”的实现。有什么吗更多的我应该做的,或者是我的使用界面简单过杀在这种情况下?我的“要求”是任何对 Shape 类的使用都必须实现 SerializeShape。我试图以一种合理的、传统的方式使用 Interface,但也许我不是?
我有一个这样的界面:
namespace Shapes
{
internal interface ISerialized<in T>
{
string SerializeShape();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一类这样的:
using System.Runtime.Serialization;
using Newtonsoft.Json;
namespace Shapes
{
[DataContract]
public class Shape : ISerialized<Shape>
{
[DataMember] public double Perimeter { get; set; }
[DataMember] public double Area { get; set; }
[DataMember] public string ShapeName { get; set; }
[DataMember] public string ShapeException { get; set; }
public string SerializeShape(Shape shape)
{
return JsonConvert.SerializeObject(shape, Formatting.Indented);
}
}
}
Run Code Online (Sandbox Code Playgroud)
本质上,如果你所做的只是让一个类实现一个接口,那么这个接口就没有用了。必须引用它来代替类才能有任何真正的好处。一个简短的人为例子来解释代码:
public interface IFoo
{
string Bar();
}
public class Foo : IFoo
{
public string Bar()
{
return "Foo";
}
}
public class FooTwo : IFoo
{
public string Bar()
{
Return "FooTwo";
}
}
public class FooBar
{
public void UseFoo()
{
IFoo foo = new Foo();
string result = foo.Bar();
}
public void UseFooTwo()
{
IFoo fooTwo = new FooTwo()
string result = fooTwo.Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这两种方法都在FooBar使用,IFoo而不是Fooor的实际实现FooTwo。这允许您(或正在实现您编写的部分代码的人)遵守IFoo. 如果他们这样做了,FooTwo fooTwo = new FooTwo()那么他们并没有真正从FooTwo实施IFoo.