只使用方法的实现?

Ste*_*eve 5 c# resharper

在 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)

gil*_*uck 9

本质上,如果你所做的只是让一个类实现一个接口,那么这个接口就没有用了。必须引用它来代替类才能有任何真正的好处。一个简短的人为例子来解释代码:

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.