热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

空接口有什么作用?

如何解决《空接口有什么作用?》经验,为你挑选了2个好方法。

我正在使用的代码具有一个空接口:

public interface ICube {}

它没有方法或属性。

一些类实现,ICube而其他接口则继承自ICube
请有人告诉我,ICube接口可能有什么好处?



1> Hien Nguyen..:

您应该从MSDN阅读有关 Interface Design

https://docs.microsoft.com/zh-cn/dotnet/standard/design-guidelines/interface

?如果您需要一组包含值类型的类型来支持某些通用API,请务必定义一个接口。

?如果需要在已经从其他类型继承的类型上支持其功能,请考虑定义接口。

X使用标记接口(无成员的接口)避免。

通常,如果需要将一个类标记为具有特定的特征(标记),请使用自定义属性而不是接口。

?请提供至少一种类型的接口实现。

这样做有助于验证接口的设计。例如,List是IList接口的实现。

?务必提供至少一个API,该API会使用您定义的每个接口(一种以接口为参数或以属性类型作为接口的方法)。

这样做有助于验证接口设计。例如,List.Sort使用System.Collections.Generic.IComparer接口。

X不要将成员添加到先前提供的接口中。

更多参考:空接口空接口代码有异味吗?

标记界面标记界面 的目的是什么?



2> Scott Hannen..:

这称为“标记接口”。有时,它们用来表示类是出于特定目的的。这不是理想的做法。

虽然我使用了标记器界面,但是下面是它们所产生的问题的说明。假设我有一个List。也许我将其作为方法参数接收。

public interface ICube {} // It's empty!

public void DoSomethingWithTheseCubes(List cubes)
{
    foreach(var cube in cubes)
    {
        // what do I do with this cube?
    }
}

您可以看到我被卡住的地方。ICube只是一个标记接口,因此它没有自己的方法或属性。我对此无能为力。这很可能导致我将每个多维数据集转换为其他类型,因此我可以对其进行处理。

public void DoSomethingWithTheseCubes(List cubes)
{
    foreach(var cube in cubes)
    {
        (SomeOtherType)cube.DoSomething();
    }
}

但是,如果我强制转换,则会引发运行时错误,因为我可能不确定每个对象的实际运行时类型是什么。如果我知道运行时类型是什么,那么我应该这样做:

public void DoSomethingWithTheseCubes(List things)
{
    foreach(var thing in things)
    {
        thing.DoSomething();
    }
}

我们并不是绝对确定会出现此问题,但是使用标记器接口会引发此问题。它正在将接口用于其预期目的以外的目的。它更像是一个属性,甚至是一个注释。

一个接口有两个可以一起使用的用途:首先,它描述了一个类实现的成员。其次,它允许我们转换一个实现接口的类作为该接口。标记接口都不起作用。它们允许我们将对象强制转换为没有成员的类型。充其量是没有用的,而在最坏的情况下则是有害的,因为它导致更可疑的转换。


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了在C#中SByte类型的GetHashCode方法,该方法用于获取当前SByte实例的HashCode。给出了该方法的语法和返回值,并提供了一个示例程序演示了该方法的使用。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
author-avatar
xiaobei爱吃肉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有