前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1812:避免未实例化的内部类

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

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

规则 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档