首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA1812:避免未实例化的内部类

CA1812:避免未实例化的内部类

作者头像
呆呆
发布于 2022-02-19 10:54:52
发布于 2022-02-19 10:54:52
5620
举报
文章被收录于专栏:centosDaicentosDai

规则 ID

CA1812

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

永远不会实例化内部(程序集级别)类型。

规则说明

此规则尝试查找对该类型其中一个构造函数的调用,并在找不到调用时报告冲突。

此规则不会检查以下类型:

值类型

抽象类型

枚举

委托

编译器发出的数组类型

无法实例化且仅定义 static(在 Visual Basic 中为 Shared)方法的类型。

如果将 System.Runtime.CompilerServices.InternalsVisibleToAttribute 应用于正在分析的程序集,那么此规则不会标记标记为 internal(在 Visual Basic 中为 Friend)的类型,因为友元程序集可能会使用字段。

如何解决冲突

若要解决此规则的冲突,请删除类型或添加使用该类型的代码。 如果类型仅包含 static 方法,请将以下内容其中之一添加到类型,以阻止编译器生成默认的公共实例构造函数:

适用于 C# 类型的 static 修饰符面向 .NET Framework 2.0 或更高版本。

面向 .NET Framework 版本 1.0 和 1.1 的类型的专用构造函数。

何时禁止显示警告

禁止显示此规则的警告是安全的。 建议在以下情况时取消显示此警告:

类通过后期绑定反射方法(如 System.Activator.CreateInstance)创建。

该类在控制反转 (IoC) 容器中注册为依赖项注入模式的一部分 。

类由运行时或 ASP.NET 自动创建。 自动创建的类的示例包括实现 System.Configuration.IConfigurationSectionHandler 或 System.Web.IHttpHandler 的类。

类作为具有 new 约束的类型参数进行传递。 以下示例将由规则 CA1812 进行标记:

internal class MyClass

{

public void DoSomething()

{

}

}

public class MyGeneric<T> where T : new()

{

public T Create()

{

return new T();

}

}

MyGeneric<MyClass> mc = new MyGeneric<MyClass>();

mc.Create();

相关规则

CA1801:检查未使用的参数

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CA1822:将成员标记为 static
非中断性 - 无论进行了何种更改,如果成员在程序集外部不可见,则为非中断修复。非中断 - 如果只使用 this 关键字将成员更改为实例成员,则为非中断修复。非中断 - 如果将成员从实例成员更改为静态成员,并且该成员在程序集外部可见,则为中断修复。
用户4268038
2022/02/23
7380
CA1805:避免进行不必要的初始化。
在运行构造函数之前,.NET 运行时将引用类型的所有字段初始化为其默认值。 在大多数情况下,在构造函数中将字段显式初始化为其默认值是多余的,这会增加维护成本,并可能会降低性能(例如,随着程序集大小的增加),可以删除显式初始化。
呆呆
2022/02/19
4200
DotNet友元程序集解析
彭泽0902
2018/01/04
9140
DotNet友元程序集解析
CA1052:静态容器类型应是 Static 或NotInheritable
非抽象类型只包含静态成员(可能的默认构造函数除外),而且没有使用 static 或 Shared 修饰符进行声明。
呆呆
2022/01/10
5760
CA2119:密封满足私有接口的方法
可继承的公共类型为 internal(在 Visual Basic 中为 Friend)接口提供可重写的方法实现。
用户4268038
2022/02/20
3500
CA1813:避免使用非密封特性
继承自 System.Attribute 的公共类型不是抽象类型,也不会密封(Visual Basic 中的 NotInheritable)。
呆呆
2022/02/19
4130
CA1010:集合应实现泛型接口
类型实现 System.Collections.IEnumerable 接口,但不能实现 System.Collections.Generic.IEnumerable<T> 接口和包含程序集的目标 .NET。 此规则会忽略能够实现 System.Collections.IDictionary 的类型。
用户4268038
2022/01/10
6880
CA1053:静态容器类型不应具有默认构造函数
规则 CA1053 仅适用于旧版 Visual Studio 代码分析。 在 .NET 代码质量分析器中,该规则已合并到规则 CA1052:静态容器类型应为 Static 或 NotInheritable 中。
呆呆
2022/01/10
4930
CA1003:使用泛型事件处理程序实例
某个类型包含的委托返回 void,且该委托的签名包含两个参数(第一个参数是对象,第二个参数是可以分配给 EventArgs 的类型),而且包含程序集面向的是 .NET。
用户4268038
2022/01/09
6030
CA1062:验证公共方法的参数
外部可见方法取消引用其中一个引用参数,而不验证该参数是否 null(Visual Basic 中 Nothing)。
呆呆
2022/01/10
8550
CA1710:标识符应具有正确的后缀
按照约定,扩展某些基类型或实现某些接口的类型的名称,或者由这些类型派生的类型的名称应具有与相应基类型或接口关联的后缀。
呆呆
2022/02/18
1.1K0
CA1810:以内联方式初始化引用类型的静态字段
当一个类型声明显式静态构造函数时,实时 (JIT) 编译器会向该类型的每个静态方法和实例构造函数中添加一项检查,以确保之前已调用该静态构造函数。 访问任何静态成员或创建该类型的实例时,将触发静态初始化。 但是,如果声明一个类型的变量,但不使用它,则不会触发静态初始化;这在初始化会更改全局状态的情况下非常重要。
呆呆
2022/02/19
7080
CA3008:查看 XPath 注入漏洞的代码
处理不受信任的输入时,请注意防范 XPath 注入攻击。 使用不受信任的输入构造 XPath 查询可能会允许攻击者恶意控制查询,使其返回一个意外的结果,并可能泄漏查询的 XML 的内容。
呆呆
2022/02/20
8490
CA1016:用 AssemblyVersionAttribute 标记程序集
.NET 使用版本号来唯一标识程序集,并绑定到强名称程序集中的类型。 版本号与版本和发行者策略一起使用。 默认情况下,仅使用用于生成应用程序的程序集版本运行应用程序。
用户4268038
2022/01/10
5970
CA1063:正确实现 IDisposable
对于未密封的类型,Finalize 实现不调用或不同时调用 Dispose(bool) 或基类终结器。
呆呆
2022/01/10
6360
CA1051:不要声明可见实例字段
字段的主要用途应是作为实现的详细信息。 字段应为 private 或 internal,并应通过使用属性公开这些字段。 在访问某个字段时,可轻松访问属性,而属性访问器中的代码可在扩展类型功能时更改,而不会引入重大更改。
呆呆
2022/01/10
5130
CA1017:用 ComVisibleAttribute 标记程序集
程序集没有已应用的 System.Runtime.InteropServices.ComVisibleAttribute 属性。
用户4268038
2022/01/10
3790
CA1000:不要在泛型类型中声明静态成员
泛型类型包含 static(在 Visual Basic 中为 Shared)成员。
呆呆
2022/01/09
5690
CA1060:将 P/Invoke 移动到 NativeMethods 类
方法使用平台调用服务访问非托管代码,不是 NativeMethods 类之一的成员。
呆呆
2022/01/10
7290
CA1014:用 CLSCompliantAttribute 标记程序集
程序集没有已应用的 System.CLSCompliantAttribute 属性。
用户4268038
2022/01/10
3670
相关推荐
CA1822:将成员标记为 static
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档