前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CA1051:不要声明可见实例字段

CA1051:不要声明可见实例字段

作者头像
呆呆
发布2022-01-10 09:25:29
4620
发布2022-01-10 09:25:29
举报
文章被收录于专栏:centosDai

规则 ID

CA1051

类别

设计

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

重大

原因

类型包含非私有实例字段。

默认情况下,此规则仅查看外部可见的类型,但这是可配置的。

规则说明

字段的主要用途应是作为实现的详细信息。 字段应为 private 或 internal,并应通过使用属性公开这些字段。 在访问某个字段时,可轻松访问属性,而属性访问器中的代码可在扩展类型功能时更改,而不会引入重大更改。

仅返回私有或内部字段的值的属性,经过优化后,可在与访问字段相同的情况上执行;使用外部可见字段而不是属性时,所带来的性能提升最小。 “外部可见”是指 public、protected 和 protected internal(在 Visual Basic中为 Public、Protected 和 Protected Friend)可访问性级别。

此外,链接要求无法保护公共字段。 (链接要求不适用于 .NET Core 应用。)

如何解决冲突

要解决此规则的冲突,请将字段设置为 private 或 internal,并使用外部可见的属性将其公开。

何时禁止显示警告

仅当确定使用者需要直接访问字段时,才禁止显示此警告。 对于大多数应用程序,公开的字段不会提供性能或优于属性的可维护权益。

在以下情况下,使用者可能需要字段访问权限:

ASP.NET Web Forms 中的内容控件。

目标平台使用 ref(例如 WPF 和 UWP 的模型-视图-视图模型 (MVVM) 框架)来修改字段。

包含或排除 API

使用下面的选项来配置代码库的哪些部分要运行此规则。

包含特定的 API 图面

排除结构

你可以仅为此规则、为所有规则或为此类别(设计)中的所有规则配置这些选项。 有关详细信息,请参阅代码质量规则配置选项。

包含特定的 API 图面

你可以根据代码库的可访问性,配置要针对其运行此规则的部分。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:

dotnet_code_quality.CAXXXX.api_surface = private, internal

排除结构

可从分析中排除 struct(在 Visual Basic 中为 Structure)字段。

dotnet_code_quality.ca1051.exclude_structs = true

示例

下面的示例显示了与此规则发生冲突的类型 (BadPublicInstanceFields)。 GoodPublicInstanceFields 显示更正后的代码。

public class BadPublicInstanceFields

{

// Violates rule DoNotDeclareVisibleInstanceFields.

public int instanceData = 32;

}

public class GoodPublicInstanceFields

{

private int instanceData = 32;

public int InstanceData

{

get { return instanceData; }

set { instanceData = value; }

}

}

另请参阅

链接需求

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

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

本文系外文翻译前往查看

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档