为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
UYOU 2023-09-24 10:54:29
假设我有一个接口,其中某些方法与另一个接口参数化:interface IFeature<T> where T : IFeatureParameters{    CustomObject Apply(CustomObject obj, T featureParameters);}但功能差异很大,它们的参数没有任何共同点,因此IFeatureParameters接口实际上是标记接口。它只是迫使开发人员在未来成对创建Feature和FeatureParameters实现。据我谷歌搜索,标记接口被认为没有理由存在于自定义代码中。在我的情况下是否适合使用标记接口?如果不能的话,可以用什么来代替呢?
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

接口IFeatureParameters在这里没有附加值。类(或您喜欢的任何类型)是否是将参数传递给功能的有效类型,完全由功能实现决定。每次开发人员对接口进行新的实现时IFeature,他们都会通过填充类型变量来明确指定正确的参数类型T。这足以确保不会将“外来”类型传递到 method 的实现中Apply。


这是一个简单的例子。


public class FeatureParametersA

{

    public string SomeText;

}


public class FeatureParametersB

{

    public int SomeNumber;

}

我可以让这些类实现一个接口IFeatureParameters,但这不是必需的。


public interface IFeature<T>

{

    CustomObject Apply(CustomObject obj, T par);

}


public class FeatureA : IFeature<FeatureParametersA>

{

    public CustomObject Apply(CustomObject obj, FeatureParametersA par);

    {

        obj.Add(par.SomeText);

        return obj;

    }

}


public class FeatureB : IFeature<FeatureParametersB>

{

    public CustomObject Apply(CustomObject obj, FeatureParametersB par);

    {

        obj.Add(par.SomeNumber.ToString());

        return obj;

    }

}

请注意每个类如何拥有其自己的专用实现Apply,特定于相关的“参数”类型。一切都是强类型的,因此编译器将阻止任何人尝试将错误的类型传递到Apply.


为了完整性:


public class CustomObject

{

    public void Add(string s) { _sb.AppendLine(s); }

    private StringBuilder _sb = new StringBuilder();

}


查看完整回答
反对 回复 2023-09-24
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信