Избегать использования не открытых полей в типах значений, видимых в COM
Обновлен: Ноябрь 2007
TypeName |
AvoidNonpublicFieldsInComVisibleValueTypes |
CheckId |
CA1413 |
Категория |
Microsoft.Interoperability |
Критическое изменение |
Критическое |
Причина
Тип значения, специально помеченный как отображаемый для COM, объявляет не открытое поле экземпляра.
Описание правила
Не открытые поля экземпляров типов значений, отображаемых для COM, отображаются для клиентов COM. Просмотрите содержимое поля, чтобы получить сведения, которые не должны выводиться или могут оказать непреднамеренное воздействие на разработку или безопасность.
По умолчанию все открытые типы значений отображаются для COM. Однако чтобы снизить количество ложных положительных результатов, данное правило требует явно указывать видимость типа для COM; содержащая сборка должна быть помечена атрибутом System.Runtime.InteropServices.ComVisibleAttribute, для которого установлено значение false, а тип необходимо пометить атрибутом ComVisibleAttribute со значением true.
Устранение нарушений
Чтобы устранить нарушение данного правила и оставить поле скрытым, измените тип значения на ссылочный или удалите атрибут 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 для взаимодействия