【问题标题】:What is the idiomatic use case for static fields inside interfaces?接口内静态字段的惯用用例是什么?
【发布时间】:2022-10-02 02:02:06
【问题描述】:

我在这个网站上搜索了任何标记为 的东西,发现这个话题很少出现。其他网站上的例子同样不能令人满意,我自己还没有想出任何东西。因此,我发现很难想到包含静态字段的接口的用例。

是否有任何设计模式或任何其他习惯用法建议在接口内使用静态字段?

    标签: c# static interface c# design-patterns interface static field


    【解决方案1】:

    在 C# 8.0 中,微软引入了default interface methods。类实现这些方法是可选的。如果没有实现,则默认实现。但是,这些方法不被类继承,只能通过接口调用(即使在实现接口的类中)。

    不属于公共接口的静态字段和其他成员用于支持这些默认接口方法的实现。但是请注意,您不能在接口中提供实例字段或属性实现。但是当然,默认的接口方法可以访问接口中声明并由实现类实现的实例属性和方法。

    C# 11 还提供了另一个功能:static virtual members in interfaces。这些必须由实现类实现。引入它们主要是为了允许为具有静态运算符方法(+、-、*、/ 等)的数字类型制定接口。但它们也允许声明静态工厂方法。这些接口在泛型类型约束中很有用。

    【讨论】:

    • "不属于公共接口的静态字段和其他成员用于支持这些默认接口方法的实现“——引文?
    • Github 上的文档csharplang/proposals/csharp-8.0/default-interface-methods.md 说:“[...] 静态和私有方法允许对用于实现接口的公共 API 的代码进行有用的重构和组织。[...]”.
    猜你喜欢
    • 2023-04-04
    • 2012-01-12
    • 2011-08-19
    • 2012-05-29
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多