使用通用接口是否可以使用其他标记接口?

假设我有一个接口,其中某些方法与另一个接口参数化:


interface IFeature<T> where T : IFeatureParameters

{

    CustomObject Apply(CustomObject obj, T featureParameters);

}

但功能差异很大,它们的参数没有任何共同点,因此IFeatureParameters接口实际上是标记接口。它只是迫使开发人员在未来成对创建Feature和FeatureParameters实现。


据我谷歌搜索,标记接口被认为没有理由存在于自定义代码中。


在我的情况下是否适合使用标记接口?如果不能的话,可以用什么来代替呢?


UYOU
浏览 99回答 1
1回答

神不在的星期二

接口IFeatureParameters在这里没有附加值。类(或您喜欢的任何类型)是否是将参数传递给功能的有效类型,完全由功能实现决定。每次开发人员对接口进行新的实现时IFeature,他们都会通过填充类型变量来明确指定正确的参数类型T。这足以确保不会将“外来”类型传递到 method 的实现中Apply。这是一个简单的例子。public class FeatureParametersA{&nbsp; &nbsp; public string SomeText;}public class FeatureParametersB{&nbsp; &nbsp; public int SomeNumber;}我可以让这些类实现一个接口IFeatureParameters,但这不是必需的。public interface IFeature<T>{&nbsp; &nbsp; CustomObject Apply(CustomObject obj, T par);}public class FeatureA : IFeature<FeatureParametersA>{&nbsp; &nbsp; public CustomObject Apply(CustomObject obj, FeatureParametersA par);&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; obj.Add(par.SomeText);&nbsp; &nbsp; &nbsp; &nbsp; return obj;&nbsp; &nbsp; }}public class FeatureB : IFeature<FeatureParametersB>{&nbsp; &nbsp; public CustomObject Apply(CustomObject obj, FeatureParametersB par);&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; obj.Add(par.SomeNumber.ToString());&nbsp; &nbsp; &nbsp; &nbsp; return obj;&nbsp; &nbsp; }}请注意每个类如何拥有其自己的专用实现Apply,特定于相关的“参数”类型。一切都是强类型的,因此编译器将阻止任何人尝试将错误的类型传递到Apply.为了完整性:public class CustomObject{&nbsp; &nbsp; public void Add(string s) { _sb.AppendLine(s); }&nbsp; &nbsp; private StringBuilder _sb = new StringBuilder();}
打开App,查看更多内容
随时随地看视频慕课网APP