避免在 COM 可见值类型中使用非公共字段

更新:2007 年 11 月

TypeName

AvoidNonpublicFieldsInComVisibleValueTypes

CheckId

CA1413

类别

Microsoft.Interoperability

是否重大更改

原因

明确标记为对 COM 可见的值类型声明非公共实例字段。

规则说明

对 COM 可见的值类型的非公共实例字段对 COM 客户端可见。请检查该字段的内容,确定不应当公开的信息或者将对设计或安全性造成意外影响的信息。

默认情况下,所有的公共值类型都对 COM 可见。但是,为了减少误报,此规则要求显式声明类型的 COM 可见性;包含程序集必须用设置为 false 的 System.Runtime.InteropServices.ComVisibleAttribute 进行标记,类型必须用设置为 true 的 ComVisibleAttribute 进行标记。

如何修复冲突

若要修复与该规则的冲突并使字段保持隐藏状态,请将值类型更改为引用类型,或者从类型中移除 ComVisibleAttribute 属性。

何时禁止显示警告

如果公开字段是可接受的,则可以安全地禁止显示此规则发出的警告。

示例

下面的示例演示一个与该规则冲突的类型。

Imports System
Imports System.Runtime.InteropServices

<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary

   <ComVisibleAttribute(True)> _ 
   Public Structure SomeStructure

      Friend SomeInteger As Integer

   End Structure

End Namespace
using System;
using System.Runtime.InteropServices;

[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
   [ComVisible(true)]
   public struct SomeStruct
   {
      internal int SomeValue;
   }
}

相关规则

避免在 COM 可见类型中使用静态成员

用 ComVisibleAttribute 标记程序集

请参见

概念

为互用性限定 .NET 类型

其他资源

与非托管代码交互操作