首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(持续整理中)Visual Studio 中 C# 代码分析规则集中每一项的含义 (stylecop ruleset)

(持续整理中)Visual Studio 中 C# 代码分析规则集中每一项的含义 (stylecop ruleset) 发布于 2018-02-07 13:55...Func 这样的嵌套泛型出现在方法参数签名中,则会出现此提示 CA1018 用 AttributeUsageAttribute 标记特性 如果继承自一个已有的 Attribute,即便基类已经写了...CA1026 不应使用默认形参 void Method(object p = null) 这样的方法不兼容 CLS,于是不被推荐 CA1033 接口方法应可由子类型调用 基类中显式实现了一个接口方法,导致子类中无法调用此接口方法...如果方法中有声明的参数没有使用,则会发出此警告 CA1813 避免使用未密封的特性 自定义的 Attribute 应该是 sealed 的 CA1822 将成员标记为 static 如果方法的实现中没有任何一个地方用到了...编号 名称 含义 CA2007 不应该直接 await 一个而不调用 ConfigureAwait 建议阅读 在编写异步方法时,使用 ConfigureAwait(false) 避免使用者死锁 了解这样提示的原因

1.9K20

应该抛出什么异常?不应该抛出什么异常?(.NETC#)

任务的使用者用错了 任务的执行代码写错了 任务执行时所在的环境不符合预期 简单说来,就是:使用错误,实现错误、环境错误。...,本身并没有明确的意义 SystemException 这是各种异常的基类,本身并没有明确的意义 Exception 这可是顶级基类,这都抛出来了,使用者再也无法正确地处理此异常了 是时候该决定抛什么异常了...对于使用错误,应该在第一时间抛出 既然对方已经用错了,那么代码继续执行也只会错上加错。...永远不应该让实现错误抛出 这一节的标题其实说了三件事情: 永远不应该主动用 throw 句式抛出“实现错误”章节中提到的任何异常 如果你在调用某个别人实现的代码时遇到了“实现错误”章节中提到的异常,那说明...= "Clicked"; 如果在执行到第一句时发生了 InvalidCastException,说明实现代码编写是不正确的。

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 托管资源与非托管资源

    托管资源: Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不要显式的去释放自己使用的内存资源(这些在先前C和C++中是需要程序员自己去显式的释放的)。...所以,当我们在类中封装了对非托管资源的操作时,我们就需要显式,或者是隐式的释放这些资源。...任何包含非托管资源的类,都应该继承此接口。...在使用时,显示调用Dispose()方法,可以及时的释放资源,同时通过移除Finalize()方法的执行,提高了性能;如果没有显示调用Dispose()方法,垃圾回收器也可以通过析构函数来释放非托管资源...上面就是.NET中对包含非托管资源的类的资源释放机制,只要按照上面要求的步骤编写代码,类就属于资源安全的类。

    3.2K10

    Moq基础(六)

    有了两种: Loose:默认行为,任何未显示伪造的方法和属性都会返回默认值,且不会抛出异常。...---- CallBase :调用基类方法 如果你期望某些方法调用原类型虚方法的默认实现,可以使用 var mock = new Mock { CallBase = true }; 这个在测试有一大堆虚方法的基类时十分有效...但是,Moq只是我们书写单元测试的工具,他真正的威力在于使用者。 兵无常势,水无常形。框架总会更新,创建测试的能力才是需要保留的。...欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。...如有任何疑问,请 与我联系 。

    87730

    (18) 为什么说继承是把双刃剑 计算机程序的思维逻辑

    继承的强大是比较容易理解的,具体体现在: 子类可以复用父类代码,不写任何代码即可具备父类的属性和功能,而只需要增加特有的属性和行为。 子类可以重写父类行为,还可以通过多态实现统一处理。...使用者只需要关注怎么用,而不需要关注内部是怎么实现的。实现细节可以随时修改,而不影响使用者。函数是封装,类也是封装。通过封装,才能在更高的层次上考虑和解决问题。...对使用者来说,add和addAll就是能够添加数字,具体是怎么添加的,应该不用关心。 下面是子类代码: ?...子类的addAll方法首先调用了父类的addAll方法,而父类的addAll方法通过add方法添加,由于动态绑定,子类的add方法会执行,子类的add也会做汇总操作。...在基类修改可能影响子类时,写修改说明。 第三种场景,我们既写基类、也写子类,关于基类,注意事项和第二种场景类似,关于子类,注意事项和第一种场景类似,不过程序都由我们控制,要求可以适当放松一些。

    1.2K60

    腾讯C++后台开发面试笔试知识点参考笔记

    这样已连接 UDP 套接字只能与一个对端交换数据报; 由已连接 UDP 套接字引发的异步错误会返回给它们所在的进程,而未连接 UDP 套接字不会接收任何异步错误; tcp套接字 服务端: listenfd...只有成员函数中的代码才应该使用作用域操作符覆盖虚函数机制。 为什么会希望覆盖虚函数机制?最常见的理由是为了派生类虚函数调用基类中的版本。...在这种情况下,已经确切知道调用哪个实例,因此,不需要通过虚函数机制。派生类虚函数调用基类版本时,必须显式使用作用域操作符。...一般我们并不关心是哪个实际类包含成员,通常只在基类和派生类共享同一名字时才需要注意。 与基类成员同名的派生类成员将屏蔽对基类成员的直接访问。...设计派生类时,只要可能,最好避免与基类数据成员的名字相同 类成员函数的重载、覆盖和隐藏区别?

    1K10

    设计模式—–里氏替换原则

    它强调设计良好的代码可以不通过修改而扩展,新的功能通过添加新的代码来实现,而不需要更改已有的可工作的代码。...为了仍然遵守 LSP 原则,并同时符合 OCP 原则,所有的衍生类必须符合使用者所期待的基类的行为。...换句话说,当通过基类接口使用对象时,客户类仅知道基类的前置条件和后置条件。因此,衍生类对象不能期待客户类服从强于基类中的前置条件。也就是说,它们必须接受任何基类可以接受的条件。...而且,衍生类必须符合基类中所定义的后置条件。也就是说,它们的行为和输出不能违背任何已经与基类建立的限制。基类的客户类绝不能对衍生类的输出产生任何疑惑。...只有当衍生类能够完全替代它们的基类时,使用基类的函数才能够被安全的重用,然后衍生类也可以被放心的修改了。

    92130

    Thinking In Java 第一章笔记

    这种思想的实际是:程序可以通过添加新类型的对象使自身适用于某个特定问题。 面向对象五个基本特征: 1.万物皆对象--可以存储数据,在自身执行操作,可以抽取任何待解问题的任何概念化构件。...适当的将类的实现隐藏起来,可以不必担心类的编写者在改写时对使用者造成的影响,从而减少程序的bug。...访问控制的意义:1.让类使用者无法触及他们不应该触及的部分(任意修改方法的实现)2.允许设计者改变类内部的工作方式而不用担心会影响到使用者。...而造成导出类与基类不同的方式有两种: 1.添加方法--简单直接(但是要考虑是否可以将这个方法抽象到基类中) 2.导出类和基类的方法上产生差异。...编辑器只要保证被调用方法的存在,及对参数和返回值的类型进行把关,并不需要知道确切执行的代码。 JAVA的后期绑定实现是通过计算在对象中存储的信息来计算方法体的具体地址。

    39510

    C++纯虚函数 virtual =0

    /这是我们不允许的,但仅用上面的代码是可以通过编译(但link时失败)。   ...核心理念就是通过基类访问派生类定义的函数。...由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。     ...这个类层次的使用者在使用它们的时候,如果仍然在需要基类的时候写针对基类的代码,在需要派生类的时候写针对派生类的代码,就等于类层次完全暴露在使用者面前。...如果这个类层次有任何的改变(增加了新类),都需要使用者“知道”(针对新类写代码)。这样就增加了类层次与其使用者之间的耦合,有人把这种情况列为程序中的“bad smell”之一。

    1.6K40

    C#的Enum——枚举「建议收藏」

    这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。枚举中大小写敏感,但是建议不要这样。   ...注意:System.Enum 类型是所有枚举类型的抽象基类(它是一种与枚举类型的基础类型不同的独特类型),并且从 System.Enum 继承的成员在任何枚举类型中都可用。...在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可能的值 枚举实例   声明: public enum...在C#中,枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构。这表示可以对它们调用方法,执行有用的任务。...注意因为.NET Framework的执行方式,在语法上把枚举当做结构是不会有性能损失的。实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。

    2.3K21

    C++11新的类功能(特殊成员函数、override和final)

    默认构造函数:如果未定义任何构造函数,编译器将提供一个默认构造函数,对于类成员则调用其默认构造函数(对于内置的成员,默认构造函数不对其进行初始化。...如果使用者提供了移动构造函数,编译器将不会自动提供默认构造函数)。 复制构造函数:如果未定义复制构造函数,而代码有需要使用它,编译器将提供一个默认的复制构造函数。...(如果使用者提供了类的移动构造函数的情况下,编译器将不会自动提供复制构造函数) 移动构造函数:如果未定义移动构造函数,而代码有需要使用它,编译器将提供一个默认的移动构造函数。...(如果使用者提供了类的析构函数、复制构造函数、复制赋值运算符或移动赋值运算符的情况下,编译器将不会自动提供移动构造函数) 复制赋值运算符:如果未定义复制赋值运算符,而代码有需要使用它,编译器将提供一个默认的复制赋值运算符...,防止重写方法的类型、名称和参数列表因为人为因素造成其与基类的不一致,无法使用多态。

    65820

    面向对象设计4原则 原

    DRY(不自我重复) 通过将共同之物抽取出来并置于单一地方避免重复的程序代码。...举例说明 Java初学者,使用JDBC,查询数据库中数据时,会有如下代码,每调用一个查询均会有 3部分,执行查询,提取结果,关闭结果集合。...当试图避免重复程序代码时,实际也在试着确保你对应用程序中每一个功能和需求只实现一次。 其实无论编写需求,开发用例或者编写代码都应该遵守DRY原则!...下面我们以委托的方式,解决上的问题,修改后代码,仅有一个setGraph方法,不会产生不必要的麻烦。 原本的类图为: ? 以委托的方式修改后的类图,这时Graph3D依赖时Graph2D ?...(OCP) 通过将共同之物抽取出来并置于单一地方避免重复的程序代码(DRY) 系统中每一个对象应该具有单一职责,所有对象的服务都应该聚焦在实现该职责上。(SRP) 子类型必须能够替换其基类型。

    54620

    Py异常处理

    异常处理在任何一门编程语言里都是值得关注的一个话题。就像写函数时肯定是判断异常处理,然后在写业务逻辑代码,这样代码才更健壮。 每当发生让Python不知所措的错误时,它都会创建一个异常对象。...±- AttributeError # 属性引用或赋值失败 ±- BufferError # 无法执行与缓冲区相关的操作时引发 ±- EOFError # 当input()函数在没有读取任何数据的情况下达到文件结束条件...# 有关可疑的运行时行为的警告的基类 ±- SyntaxWarning # 关于可疑语法警告的基类 ±- UserWarning # 用户代码生成警告的基类 ±- FutureWarning # 有关已弃用功能的警告的基类...用户自定义异常 你也可以通过创建一个新的异常类拥有自己的异常,异常应该是通过直接或间接的方式继承自Exception类。...下面创建了一个MyError类,基类为Exception,用于在异常触发时输出更多的信息。

    1.5K30

    java面向对象三大特征及五大原则

    ,而只是通过外部接口即可访问类的成员 2、继承(Extend) 继承是指将多个相同的属性和方法提取出来,新建一个父类 java中一个类只能继承一个父类,且只能继承访问权限非private属性和方法 子类可以重写父类中的方法...,命名与父类中同名的属性 目的:代码复用 3、多态 多态(Polymiorph)可以分为两种:设计时多态、运行时多态 设计(编译)时多态:即重载(Overload),是指java允许方法名相同而参数不同...目的:增加代码的灵活度 总结: 1、java中应尽量减少继承关系,以降低耦合度 2、使用多态时,父类在调用方法时,优先调用子类的方法,如果子类没有重写父类的方法,则再调用父类的方法 3、java访问控制符作用范围表...每个类应该实现单一的职责,如果不是,那就把类拆分 开放封闭原则:对扩展开放,对修改封闭 里氏替换原则:子类必须能够替换其基类,里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现 依赖倒置原则:依赖于抽象接口...,不要依赖于具体实现,简单来说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户于与实现模块间的耦合 接口隔离原则:使用多个小的专门接口,而不是使用一个大的接口 发布者:全栈程序员栈长,转载请注明出处

    29420

    C++异常

    异常的概念 关键字try模块里放置可能抛出异常的代码,try块中的代码称为保护代码。 当问题出现时,程序会通过关键字throw抛出一个异常。...这里进入了Func函数的catch语句,执行完catch语句之后,Func函数后续的代码继续执行。...图片 异常再抛出结合catch(...)接收任何类型的异常对象可以作为异常处理中转站,让后续catch再去处理异常 抛出的派生类对象,使用基类捕获 实际中抛出和捕获的匹配原则有个例外,并不都是类型完全匹配...,可以抛出的派生类对象,使用基类捕获,这个在实际中非常实用。...图片 另外,可以用基类专门接收该基类抛出的异常,如图专门捕获HttpServerException类的异常,其余异常通过基类引用进行捕获。

    41500

    Python基础—让你规范Python语言的使用

    当某种条件发生时, 它也允许控制流跳过多个框架. 例如, 一步跳出N个嵌套的函数, 而不必继续执行错误的代码. 缺点: 可能会导致让人困惑的控制流. 调用库时容易错过错误情况....模块或包应该定义自己的特定域的异常基类, 这个基类应该从内建的Exception类继承. 模块的异常基类应该叫做”Error”....使用finally子句来执行那些无论try块中有没有异常都应该被执行的代码. 这对于清理资源常常很有用, 例如关闭文件. 当捕获异常时, 使用 as而不要用逗号....优点: 通过消除简单的属性(attribute)访问时显式的get和set方法调用, 可读性提高了. 允许懒惰的计算. 用Pythonic的方式来维护类的接口....该转换可能减少一些重复代码, 保持已有函数不变(enforce invariants), 等. 缺点: 装饰器可以在函数的参数或返回值上执行任何操作, 这可能导致让人惊异的隐藏行为.

    1.6K80

    充血模型的ORM能做什么?——ORM组件XCode(十八般武艺)

    这样设计,简单明了,使用者可以很容易的找到自己需要的东西。我们的代码生成器XCoder就是依赖于XCode来获取数据库架构的。有了这个功能,人人都可以写自己的代码生成器了!...如果系统发布还需要附带数据,那就不可能做到发布时更换数据库了,除非发布多个数据库的版本。 也许有人会说,不带数据库的话,初始化的数据怎么办?...动态生成的另一目标是让使用者通过调用一些方法来生成实体类代码,而不是一定要通过XCoder来生成。...在第一代XCode中,因为充血模型,实体类上要附带大量的方法,而当它们的返回类型是实体类或者实体类集合时,这些方法就必须实现于实体类的代码中,实际上是通过代码生成器来生成。...在第二代XCode,引入了泛型基类技术,实体类通过泛型参数TEntity指定最终返回类型,编写查询方法的时候,返回类型使用泛型参数TEntity即可。

    1.2K90

    EasyC++87,多继承(二)

    虽然这里使用的也是virtual关键字,但虚函数和虚基类之间并没有任何关联,只不过是C++官方不愿意引入更多关键字以免造成使用者的负担而已。...为了避免这种冲突,C++在基类是虚时,禁止数据通过中间类传递给虚基类,因此上述代码中的wk参数将会失效。在这种情况下,编译器会调用Worker的默认构造函数。...如果不希望通过默认构造函数来创建对象,也可以手动显示地调用基类的构造函数: SingingWaiter(const Worker &wk, int p=0, int v=0): Worker(wk),...Waiter(wk, p), Singer(wk, v) {} 需要注意的是,这种写法只在虚基类时是合法的,其他情况是非法的。...这个时候我们想要通过一个方法同时执行Singer和Waiter中的show方法,就必须要修改Singer和Waiter中的逻辑了,这显然是我们不愿意看到的,但却无可奈何。

    39810
    领券