在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);
}
}
}
答案 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
而不是Foo
或FooTwo
的实际实现。这使您(或正在实现您编写的部分代码的人)能够履行IFoo
的合同。如果他们完成了FooTwo fooTwo = new FooTwo()
,那么他们FooTwo
实施IFoo
并不会真正受益。