[FxCop.设计规则] 3. 避免定义空的接口

Cadence学习之路(六)元器件封装绘制 使用Allegro PCB Designer绘制元器件封装 阅读详情

 

版权声明:

 

本文由timewolf完成,首发于优快云,作者保留版权。
未经许可,不得使用于任何商业用途。
欢迎转载,但请保持文章及版权声明完整。
如需联络请发邮件:karla9(AT)eyou(dot)com

3.     避免定义空的接口

原文引用:

Avoid empty interfaces

TypeName:

AvoidEmptyInterfaces

CheckId:

CA1040

Category:

Microsoft.Design

Message Level:

Warning

Certainty:

90%

Breaking Change:

Breaking


Cause: The interface does not declare any members or implement other interfaces.

Rule Description

Interfaces define members that provide a behavior or usage contract. The functionality described by the interface can be adopted by any type, regardless of where the type appears in the inheritance hierarchy. A type implements an interface by providing implementations for the interface's members. An empty interface does not define any members, and as such, does not define a contract that can be implemented.

If your design includes empty interfaces that types are expected to implement, you are most likely using an interface as a marker, or a way of identifying a group of types. If this identification will occur at runtime, the correct way to accomplish this is to use a custom attribute. Use the presence or absence of the attribute, or the attribute's properties, to identify the target types. If the identification must occur at compile time, then using an empty interface is acceptable.

How to Fix Violations

Remove the interface or add members to it. If the empty interface is being used to label a set of types, replace the interface with a custom attribute.

When to Exclude Messages

It is safe to exclude a message from this rule if the interface is used to identify a set of types at compile-time.

Example Code

The following example shows an empty interface.

[C#]

using System;

namespace DesignLibrary
{
   
public interface BadInterface
   
{
      
// Violates rule: AvoidEmptyInterfaces.
   }

}

 

引发原因:

一个接口没有任何成员,且没有继承其他接口。

规则描述:

接口定义了一组成员,用以描述接口拥有的行为或契约(usage contract),任何类型都可以实现该接口, 无需考虑该类的继承层次。一个类通过实现接口的成员从而实现接口。一个空的接口没有定义任何成员,因此,也就没有任何契约能够被实现。

如果你的设计包含空的接口,并希望它被某些类实现,你很可能是将该接口作为一个标记,用以标示一组类型。如果只需在运行时区分这些类型,你可以使用自定义特性(attribute)。通过检查某个类是否包含该特性,以及特性所包含的属性(property),来达到识别某个类的目的;当然,如果你希望在编译期就执行此种检查,就只好使用空接口了。

修复:

删除该接口,或添加必要的成员到该接口。

如果该接口被用于运行时的类型识别,将接口替换为自定义特性。

译注:

自定义特性是.NET新引入的一种开发元素,通过将自定义特性和应用程序元数据保存在一起,开发人员可以获得类似自定义关键字的能力。以下是MSDN中对于特性的描述:

如果您使用过 C++,您或许对包含关键字(如 public 和 private)的声明比较熟悉。这些关键字提供有关类成员的附加信息,还通过描述类成员对其他类的可访问性来进一步定义类成员的行为。由于编译器被显式设计为识别预定义关键字,因此传统上您没有机会创建自己的关键字。但是,公共语言运行库允许您添加类似关键字的描述性声明(称为特性)来批注编程元素,如类型、字段、方法和属性。

为运行库编译代码时,该代码被转换为 Microsoft 中间语言 (MSIL),并同编译器生成的元数据一起被放到可移植可执行 (PE) 文件的内部。特性使您得以向元数据中放置额外的描述性信息,并可使用运行库反射服务提取该信息。当您声明从 System.Attribute 派生的特殊类的实例时,编译器创建特性。

.NET Framework 出于多种原因使用特性并通过它们解决若干问题。特性可以描述如何序列化数据,指定用于强制安全性的特性,以及限制实时 (JIT) 编译器的优化以使代码易于调试。特性还可以记录文件名或代码作者,或在窗体开发阶段控制控件和成员的可见性。

可使用特性以几乎所有可能的方式描述代码,并以富有创造性的新方式影响运行库行为。特性允许您向 C#、C++ 托管扩展、Microsoft Visual Basic .NET 或其他任何以运行库为目标的语言添加自己的描述性元素,而不必重新编写编译器。

使用特性可以获得很大的开发灵活性,并且可以提供很多非常清晰易读的代码,笔者看到的在NUnit中的一段代码可以作为使用特性的很好例子:
上面的例子中,基类里通过自定义特性分析命令行参数,并将他们分别填充到字段中。例如用户输入下面的命令行参数:

namespace NUnit.Util
{
     
using System;
     
using Codeblast;

     
public class ConsoleOptions : CommandLineOptions
     
{
         [Option(Description 
= "Fixture to test")]
         
public string fixture;

         [Option(Description 
= "Project configuration to load")]
         
public string config;
 
         [Option(Description 
= "Name of XML output file")]
         
public string xml;
 
         [Option(Description 
= "Name of transform file")]
         
public string transform;
 
         [Option(Description 
= "Display XML to the console")]
         
public bool xmlConsole;
     }

}


NUnit-Console.exe /config:a.cfg

基类就会将“a.cfg”填充到config变量中。

相关的代码可以参考NUnit/nunit.util.dll/CommandLineOption.cs 和 NUnit/nunit.util.dll/ConsoleOption.cs。

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs) 中国60个城市的1 km分辨率城市冠层参数(UCPs) 阅读详情

相关推荐

从零构建知识图谱:本体工程与知识建模实战指南

本文是一份从零构建知识图谱的实战指南,重点阐述了知识建模与本体工程的核心地位。文章详细介绍了如何使用Protégé工具进行本体设计,包括定义领域、复用现有本体、构建类层次与属性约束,并讲解了如何利用D2RQ工具将关系数据库数据转换为RDF三元组,最终通过Apache Jena Fuseki搭建SPARQL端点进行知识查询与推理,让知识图谱真正“活”起来。

weixin_29057695的博客 568

[FxCop.设计规则]3. 避免定义空的接口

3.     避免定义空的接口原文引用:Avoid empty interfacesTypeName:AvoidEmptyInterfacesCheckId:CA1040Category:Microsoft.DesignMessage Level:WarningCertainty:90% Breaking Change:BreakingCause: The interface does not d

cajon的专栏 1551

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

Microsoft FxCop 的设计规则 .

一、Design Rules(设计规约) 1、AbstractTypesShouldNotHaveConstructors    CA1012 不言而喻,抽象类型里即使编写了构造函数也不能直接的调用到。 4、AvoidExcessiveParametersOnGenericTypes    CA1005 避免泛型类型的参数过多,两个是一个分界线,最好不要超过两个。 7、Collectio

胡杨 3030

ffmpeg中av_read_frame阻塞的原因与解决方案

最近用到ffmpeg,想要av_read_frame立即返回,但是看网上的博客,都没有详细的解说,那就自己看源码。 两种方法: 设置回调打断函数和设置超时 超时,但是如果只设置该参数,依然会在av_read_frame中阻塞, av_dict_set(&inputDic, "stimeout", "2*1000*1000", 0); // milliseconds //打断回调 m_avformatCtx->interrupt_callback.callback = interru

weixin_43360707的博客 1万+

图解ADAS电源系统架构:看懂这张图,搞懂前装摄像头的供电秘密!

别以为ADAS系统就是“摄像头 + SoC”,其实最难搞的是供电系统,尤其是要满足车规级ASIL-D安全等级时。供电时序、电压稳定性、电源监控、冗余通信链路,一个都不能少。😤一旦电源选型不对,轻则系统卡顿,重则全车失控,不是闹着玩的。

weixin_43199439的博客 672

FxCop 设计规则

FxCop 设计规则 Posted on 2005-09-07 16:40 冰戈 阅读(193) 评论(0)  编辑 收藏 收藏至365Key 所属分类: .NET资料 <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/

deadshot123的专栏 2055

【WRF-Chem工具】anthro_emiss 详解:生成人为排放数据

anthro_emiss 详解:生成人为排放数据

WW、forever的博客 2055

Microsoft FxCop 的设计规则

近日在尝试利用Microsoft FxCop进行一些.Net项目进行检测和优化,这里转贴一下FxCop 的设计规则:一、 Design(设计)1. Abstract types should not have constructors 抽象类不应该声明构造方法2. Assemblies should have valid strong names 程序集应该具有强名称3. Avoid em

Anders's Blog 1767

基于深度学习的火焰检测系统:YOLOv8 + UI界面 + 数据集详解

YOLO(You Only Look Once)是一种端到端的目标检测算法,其最大优势在于将目标检测任务转化为一个回归问题,可以在一次前向传播中同时完成目标定位和分类。YOLOv8是YOLO系列中的最新版本,相比之前的版本,YOLOv8在精度和推理速度上都做了显著提升,特别是在小物体检测方面表现更加优秀。实时性:YOLOv8具有较高的推理速度,适用于实时火焰检测。高精度:相较于YOLOv7,YOLOv8在精度和小物体检测上有所改进。简单易用:YOLOv8的API简单直观,易于集成和使用。

YOLO 660

17|CI/CD 集成与质量门禁:让精准测试进入发布流水线

本文讲解精准测试如何接入 CI/CD 流水线,并通过质量门禁辅助发布决策。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 66

代码审查工具FxCop建议采用的规则总结

续接:    代码走查工具篇FxCop的规则总结与翻译_Part1  代码走查工具篇FxCop的规则总结与翻译_Part2 代码走查工具篇FxCop的规则总结与翻译_Part3    本篇结合我的实际工作需要,总结了一份在实际工作中采纳的规则项目,总结不妥之处,还请多海涵。 一、Design Rules(设计规约) 1、AbstractTypesShou

anders lu 的专栏 4426

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2535

代码走查工具篇FxCop的规则总结与翻译_Part1

FxCop介绍 摘抄自百度知道,如下:     FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单(包括引用外部的assembly、netmodule与资源文件及包含在同一文件中的assembly

anders lu 的专栏 3565

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[置顶] 代码审查工具FxCop建议采用的规则总结

续接: 代码走查工具篇FxCop的规则总结与翻译_Part1 代码走查工具篇FxCop的规则总结与翻译_Part2 代码走查工具篇FxCop的规则总结与翻译_Part3 本篇结合我的实际工作需要,总结了一份在实际工作中采纳的规则项目,总结不妥之处,还请多海涵。 一、DesignRules(设计规约) 1、AbstractTypesShouldNo...

weixin_30483495的博客 598

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从FxCop归纳出来的一些规范建议

从FxCop归纳出来的一些规范建议 下面是根据FxCop整理的.NET代码编写规范,仅供参考。一、 Design(设计)1. Abstract types should not have constructors 抽象类不应该声明构造方法2. Assemblies should have valid strong names 程序集应该具有强名称3. Avoid empty inte...

291

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

从FxCop归纳出来的一些规范建议 (转)

下面是根据FxCop整理的.NET代码编写规范,仅供参考。 一、 Design(设计) 1. Abstract types should not have constructors 抽象类不应该声明构造方法 2. Assemblies should have valid strong names 程序集应该具有强名称 3. Avoid empty interfaces ...

dengnian8283的博客 151

fxcop study

FxCop 设计规则 Posted on 2005-09-07 16:40 冰戈 阅读(193) 评论(0)  编辑 收藏 收藏至365Key 所属分类: .NET资料   一、 Design(设计)1. Abstract types should not have constructors 抽象类不应该声明构造方法2. Assemblies should have valid strong

chenyistrength的专栏 535

[置顶] 代码走查工具篇FxCop的规则总结与翻译_Part1

FxCop介绍 摘抄自百度知道,如下: FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单(包括引用外部的assembly、netmodule与资源文件及包含在同一文件中的a...

weixin_30244889的博客 120

转:根据FxCop整理的.NET代码编写规范,仅供参考

下面是根据FxCop整理的.NET代码编写规范,仅供参考。一、 Design(设计) 1. Abstract types should not have constructors 抽象类不应该声明构造方法 2. Assemblies should have valid strong names 程序集应该具有强名称 3. Avoid empty ...

282
上一篇: [FxCop.设计规则]2. 程序集应该拥有有效的强命名
下一篇: [FxCop.设计规则]4. 避免太多的范型参数
timewolf
博客等级 码龄23年 12粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值