接口是否有 ISomething / ISomethingable 的既定替代方案?

2024-01-11

在接口名称前添加 I 前缀的 .NET 标准似乎正在变得越来越普遍,并且不再仅限于 .NET。我遇到过很多使用此约定的 Java 代码(因此,如果 Java 在 C# 之前使用它,我不会感到惊讶)。 Flex 也使用它,等等。不过,在名称开头放置 I 有点匈牙利符号的味道,所以我对使用它感到不舒服。

所以问题是,是否有另一种方法来表示 Something 是一个接口,而不是一个类,并且是否有必要这样表示它。或者它是否已经成为一种标准,所以我应该接受它并停止试图通过建议采取不同的方式来煽动“宗教战争”?


来自《框架设计指南》一书:

表示层次结构根的接口(例如 IList)也应该使用名词或名词短语。表示功能的接口应使用形容词和形容词短语(例如 IComparable、IFormattable)。

另外,从接口命名的注释来看:

KRZYSZTOF CWALINA:少数人之一 接口使用的前缀是“I” (如 ICollection 中),但那是为了 历史原因。回想起来,我 认为使用会更好 常规类型名称。在大多数 开发人员不关心的情况 有些东西是一个接口而不是一个 例如,抽象类。

布拉德·艾布拉姆斯:另一方面,接口上的“I”前缀是明确的 认识到 COM 的影响 (和 Java)在 .NET Framework 上。通讯 大众化,甚至制度化, 接口开始的符号 与“我”。虽然我们讨论过 背离了这一历史模式 我们决定继续发扬 我们的许多用户都是这样的模式 已经熟悉COM。

JEFFREY RICHTER:就我个人而言,我喜欢 “I”前缀,我希望我们有更多 像这样的东西。小独字 前缀对于保持 代码简洁但具有描述性。正如我 前面说过,我使用前缀 私有类型字段,因为我发现 这非常有用。

布伦特校长注: 这实际上是另一个应用程序 匈牙利表示法(尽管没有 表示法的缺点 在变量名中使用)。

它已经成为一种广泛采用的标准,虽然它是匈牙利语的一种形式,正如布伦特所说,但它并没有受到在变量名称中使用匈牙利表示法的缺点的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口是否有 ISomething / ISomethingable 的既定替代方案? 的相关文章

  • 数据源和数据集的区别

    我目前正在开发一个项目 其主要任务是读取存储在 SQL 数据库中的数据并以用户友好的形式显示它们 使用的编程语言是C 我在 Borland C Builder 6 环境中工作 但我认为标题中提出的问题与编程语言或库无关 当从数据库读取数据时
  • 继承接口方法的重新实现

    我不完全理解如何使用接口 所以我必须问 我使用 BaseClass 它实现了 IBaseClass 接口 这些接口仅包含一个声明 public interface IBaseClass void Refresh 所以我在我的 Basecla
  • 在实现接口的类上强制使用单例模式

    我最好用一个例子来解释这个问题 我有一个接口模型可用于访问数据 模型可以有不同的实现 可以以各种格式表示数据 例如 XMl txt 格式等 Model不关心格式 可以说这样的一个实现是myxml模型 现在我想强迫myxml模型以及其他所有实
  • NHibernate 中具有不同类型答案的问题

    我正在尝试找到一个问卷问题的简洁解决方案 假设我有一个Questionnaire类有一个集合Answers e g public class Questionnaire public virtual ISet
  • 如何为自定义 Perl 模块选择一个不与内置或 CPAN 包名称冲突的包名称?

    我已阅读模块上的 perldoc http perldoc perl org perlmod html 但我没有看到关于命名包的建议 这样它就不会与内置或 CPAN 模块 包名称冲突 过去 为了开发本地Session pm模块 我使用我公司
  • 有人能解释一下 C# 中接口的具体用法吗?

    有人能解释一下 C 中接口的具体用法吗 msdn 对此没有帮助吗 http msdn microsoft com en us library 87d83y5b aspx http msdn microsoft com en us libra
  • 具有不同返回类型的 C# 通用接口

    我有可以返回多种格式数据的网络服务 例如 json 和 xml 我正在针对此 Web 服务构建一个简单的 C api 我希望这些方法能够从 json 原始 json 或原始 xml 返回完全序列化的对象 例如 List
  • 在 Clojure 和其他 Lisp 方言中,在函数名称末尾使用星号的约定是什么?

    请注意 我不是在谈论符号名称中的耳罩 这个问题在Clojure 常量的约定 样式和用法 https stackoverflow com questions 3579063 conventions style and usage for cl
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • AXI4 流接口:如何在 HLS 中管理浮点数组以生成硬件加速器并在 RTL 项目中安全地连接它们?

    最后 我想做的是使用 Vivado Design Suite 中具有单精度浮点数组的流接口来构建硬件加速器 HLS 用户指南UG902 http www xilinx com support documentation sw manuals
  • 您将整个应用程序中使用的常量保存在哪里?

    界面是存储我的信息的可接受的地方吗 public static final Foo bar 您是否推断它们可以从程序外部读取 你给它编了一个超级课吗 当情况出现时 你会怎么做 我会将每个常量放入与其最密切相关的类或接口中 例如 因为它将被其
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • ServiceStack操作命名约定可以被覆盖吗?

    我需要为 ServiceStack 服务定义一个 DTO 类 服务堆栈使用基于类名的约定 因此如果我的类称为 Transmission 则相应的服务将使用 HTTP 操作中使用的类型为 Transmission 的公开元数据 但我已经有了
  • 多个 WCF 服务实现相同的服务契约接口

    多个wcf服务是否可以实现同一个服务契约接口 我想要做的是允许测试服务与真实服务互换 并指定在配置文件中使用哪个服务 例如 ServiceContract public interface IUselessService Operation
  • 返回 RxJava 的 Completable 的方法的命名约定

    我有一个带有视图类的 Android 应用程序 Fragment Activity 观察其ViewModel The ViewModel公开方法 例如getUserName返回Observable
  • 用户界面上的“ID”或“Id”

    我工作的 QA 经理刚刚告诉我 我的桌面应用程序存在一个错误 因为登录提示应该是 操作员 ID 而却是 操作员 ID 她的论点是 本我 指的是弗洛伊德 精神装置 的自我部分 在语义上是不正确的 现在 作为一名肛门工程师 AE 我当然必须去查
  • 优化查找所有实现 IInterface 的类以及使用特定类型显式实现它的类

    我定义了一个接口 ISerializeDeserialize 和一些继承通用接口的类 我还有一些使用 CodeDomProvider 生成代码的程序集 它生成从同一接口继承的类 但使用特定类型实现它 我想要实现的是获取通用实现和实现特定类型
  • 我对 C# 接口成员的默认访问修饰符感到困惑[重复]

    这个问题在这里已经有答案了 什么是访问修饰符interface方法 它应该是public or protected因为当你实现它们时你可以访问它们 这是有道理的 也应该是abstract因为他们没有实施 但最近我在读一本书 名叫通过 C 进
  • Python 中的参数命名约定

    对于形式参数密切相关的函数 例如 def add two numbers n1 n2 return n1 n2 def multiply two numbers n1 n2 return n1 n2 如上所示 为两个函数中的参数指定相同的名

随机推荐

  • Firebase 响应太慢

    大家好 我正在使用 Firebase 实时数据库为我的 React js Web 应用程序获取一些数据 有一个useState called Corr User应该存储正确用户名的值 我有一个function从 Firebase 获取用户名
  • 变量值列表的 Tensorflow 特征列

    从 TensorFlow 文档中可以清楚地了解如何使用tf feature column categorical column with vocabulary list创建一个特征列 它将一些字符串作为输入并输出一个单热向量 例如 voca
  • 将对象从 Fragment 传递到 Activity

    问题 如何将对象从片段传递到活动 根据活动的请求 背景 我正在使用 Android Studio 并通过 新建 Android 活动 向导设置了一个新的选项卡式活动 然后我定义了 5 个片段 每个片段包含不同的输入集 编辑文本等 然后 每个
  • 链接到适用于 Android 的工作 webRTC 库

    Google Play 最近几天有一个关于我使用的 WebRTC 库的新错误 警告 我使用这个库将近一年了 google webrtc 1 0 32006 aar 我的应用程序仍然可用 但他们要求更新库 这通常意味着他们将来会阻止使用该库的
  • 如何清除实体框架 ICollection 中的所有元素?

    我在使用 Clear 从实体框架中的集合中删除所有元素时遇到问题 考虑经常使用的博客和帖子示例 public class Blog public int Id get set public string Name get set publi
  • 无法在 asp.net 母版页文件中放置断点

    我有一个 MVC Web 应用程序 我在下面的第 16 行中收到 对象引用未设置为对象实例 错误 这是一个母版页文件 当我尝试在该行或文件中的任何位置放置断点时 出现 这不是断点的有效位置 错误 我已经单击了每一行 但无法放置一个断点 我确
  • StudentSubmissions.Patch UpdateMask 错误

    尝试在 Google Apps 脚本中使用 Classroom API 的 StudentSubmissions Patch 部分并继续运行时遇到此错误 updateMask updateMask 只能包含 draftGrade 或 指定等
  • 如何将 include/lib 目录添加到 MSVC 2015 解决方案中的所有项目?

    我有一个很大的解决方案 在每个项目中添加 更改包含目录非常繁琐 是否可以一步为所有项目设置公共包含文件夹 Thanx 不直观的第一步是在 解决方案资源管理器 窗口中选择多个项目 如有必要 请先折叠项目节点 单击第一个项目 然后按住 Shif
  • svn错误413请求实体太大的原因是什么?

    有时 我在更新 svn 存储库时收到错误 413 请求实体太大 一旦收到此错误 每次我尝试更新本地工作副本时都会继续出现此错误 新的结账方式可以解决问题 但是很不方便 该项目超过 30 GB SVN 存储库托管在外部 过去 这种情况在多台不
  • MySQL 表中的最大列数[重复]

    这个问题在这里已经有答案了 我对 MySQL 还很陌生 我有几个问题 1 有多少 最多 个 可以在 MySQL 表中创建列 2 有多少 最大 数量 可以在 MySQL 数据库中创建许多表 1 每个表大约有 4 096 列 2 mySQL有数
  • 如何在android中显示欢迎屏幕?

    您好 我想要一个带有我的徽标的屏幕 该屏幕应显示 2 3 秒 然后应进入主程序 我怎样才能实现这个 这是一个简单的splashScreen实现 public class SplashScreen extends Activity priva
  • x86/x64 添加位移寻址

    我正在为 x86 x64 CPU 指令编写一个编译器 但我似乎无法弄清楚人们所说的 位移 地址是什么意思 例如 添加指令详细信息如下 http www c jump com CIS77 CPU x86 X77 0150 encoding a
  • 动画搜索栏进度

    我的屏幕有 4 个搜索栏 如下图所示 如果用户移动 B C 或 D 我计算三者的平均值并将 A 的进度设置为平均值 这是最容易的部分 我想做的是为进度条 A 设置动画 使其不会一次性跳跃 例如从 25 75 为 A 制作动画的推荐方法是什么
  • 如何使用异步方法对 ViewModel 进行单元测试。

    我不知道从哪里开始 但让我简要介绍一下我现在的处境以及我想要实现的目标 我对 MVVM 上的单元测试相当陌生 并且在测试使用 PRISM 委托命令属性公开的命令时遇到困难 我的委托命令调用必须等待的异步方法 以便我可以获得实际结果 下面是我
  • 无法获取httpResponse内容

    我没有设法从 android 模拟器查询 Web 服务 之前我有一个 UnresolvedHostException 但这没关系 现在我可以更进一步了 我在 HttpResponse 的实体中没有返回任何内容 长度为 1 String ur
  • 从 pandas 数据框索引创建列

    我有一个数据框 我想将索引 第一级 中的数据转换为列 实际上我的 df 看起来像这样 col1 CoI AK 0 1 1 31 2 NaN BB 0 5 1 31 2 NaN 我想把它变成这样 col1 CoI 0 1 AK 1 31 AK
  • 根据特定值创建新变量

    我阅读了正则表达式和 Hadley Wickham 的stringr and dplyr包 但不知道如何让它工作 我在数据框中保存了图书馆流通数据 索书号作为字符变量 我想将最初的大写字母作为一个新变量 并将字母和句点之间的数字作为第二个新
  • 如何使用phonegap javascript获取IP地址

    如何使用phonegap javascript 获取IP 地址 我必须将此 IP 地址作为查询字符串发送到 php 页面 有什么建议吗 干得好 http simonmacdonald blogspot in 2012 08 so you w
  • 如何确定文档是否与查询匹配,例如规范化 elasticsearch 分数?

    Elasticsearch 计算的分数提供了文档之间的排名 但它并不能说明文档是否与请求匹配 目前 第一个文档可以匹配所有字段或仅匹配一个字段 分数提供的唯一信息是它是最佳匹配 是否有可能获得关于查询的标准化分数 例如 得分 1 表示文档与
  • 接口是否有 ISomething / ISomethingable 的既定替代方案?

    在接口名称前添加 I 前缀的 NET 标准似乎正在变得越来越普遍 并且不再仅限于 NET 我遇到过很多使用此约定的 Java 代码 因此 如果 Java 在 C 之前使用它 我不会感到惊讶 Flex 也使用它 等等 不过 在名称开头放置 I