只使用方法的实现?

Only implementations of method are used?

在 ISerialized 中,Resharper 抱怨使用了 "Only implementations of 'SerializeShape"。有什么 more 我应该做的吗,或者在这种情况下我对接口的使用只是过度杀戮?我的 'requirements' 是任何使用 class Shape 实现 SerializeShape。我正在尝试以合理、传统的方式使用界面,但也许我不是?

我有这样的界面:

namespace Shapes
{
    internal interface ISerialized<in T>
    {
        string SerializeShape();

    }
}

我有一个 class 这样的:

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);
        }
    }
}

本质上,如果您所做的只是 class 实现一个接口,那么该接口就没有任何用处。必须引用它来代替 class 才能真正发挥作用。用代码解释一个简短的人为示例:

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();
    }
}

如您所见,FooBar 中的两种方法都使用 IFoo 而不是 FooFooTwo 的实际实现。这允许您(或正在实施您编写的部分代码的人)遵守 IFoo 的合同。如果他们已经完成 FooTwo fooTwo = new FooTwo() 那么他们并没有真正从 FooTwo 实施 IFoo.

中获得任何好处

我知道这是一个老问题,但我刚刚 运行 遇到了类似的情况。

弹出此警告似乎是因为您没有从外部使用它class。也许您只是还没有创建对它的调用,或者在我的例子中,它仅在 class 实现接口的内部使用。

如果你一写接口或者实现接口的时候就弹出这个警告,那说明你还没有使用这个方法。一旦您使用该接口从其他代码调用该方法,警告就会消失。

就我而言,该方法可能曾一度在 class 之外使用,但通过代码的迭代,它现在仅在内部使用。如果我愿意,我可以将方法从 public 更改为 private 并从接口中删除方法声明。

旁白:因为我只有一个 class 实现该接口,所以我可以完全删除该接口,只使用它自己的实现 class,这将完全避免此警告。但是,此接口有多个参考,包括自动化测试。删除界面超出了我need/want所做的更改范围,所以我不打算这样做。