只使用方法的实现?

问题描述 投票:1回答:1

在ISerialized中,Resharper抱怨“只使用'SerializeShape'的实现。还有什么我应该做的,或者我在这个例子中使用的界面只是过度杀戮?我的“要求”是任何使用类Shape实现SerializeShape。我试图以合理的传统方式使用Interface,但也许我不是?

我有一个这样的界面:

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);
        }
    }
}
c# resharper
1个回答
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的任何好处。

© www.soinside.com 2019 - 2024. All rights reserved.