Только реализации метода используются? - PullRequest
0 голосов
/ 15 сентября 2018

В ISerialized Resharper жалуется, что используются «только реализации SerializeShape». Есть ли что-то больше , которое я должен делать, или мое использование интерфейса просто перебивает в этом случае? Мои «требования» состоят в том, чтобы любое использование класса 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 голосов
/ 15 сентября 2018

По сути, если все, что вы делаете, - это класс, реализующий интерфейс, то этот интерфейс бесполезен. На него следует ссылаться inlieu класса, чтобы иметь реальную выгоду. Краткий надуманный пример для объяснения в коде:

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 вместо фактической реализации Foo или FooTwo. Это позволяет вам (или кому-то, кто реализует часть кода, которую вы написали) соблюдать договор, который IFoo. Если бы они сделали FooTwo fooTwo = new FooTwo(), то на самом деле они не получают никакой выгоды от FooTwo реализации IFoo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...