仅使用方法的实现?

时间:2018-09-15 12:52:08

标签: c# resharper

在ISerialized中,Resharper抱怨说“仅使用'SerializeShape的实现”。我应该做些什么 more ,还是在这种情况下我使用接口仅仅是过分的杀伤力?我的“要求”是对Shape类的任何使用都应实现SerializeShape。我试图以一种合理的,传统的方式使用接口,但是也许我不是吗?

我有这样的界面

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

    }
}

我有这样的一类:

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

1 个答案:

答案 0 :(得分:3)

本质上,如果您所做的只是拥有一个实现接口的类,则该接口没有用。它必须被引用为该类的替代方法,才能真正发挥作用。一个简短的人为示例,用代码进行解释:

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并不会真正受益。