CA1406: не следует использовать аргументы Int64 для клиентов Visual Basic 6
TypeName |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
Категория |
Microsoft.Interoperability |
Критическое изменение |
Критическое изменение |
Причина
Тип, который специально помечен как видимый для COM, объявляет член, который принимает аргумент типа Int64.
Описание правила
COM-клиенты VisualBasic 6 не могут получать доступ к 64-разрядным целым числам.
По умолчанию для модели COM видимы следующие объекты: сборки, общие типы, члены общих экземпляров в общих типах и все элементы общих типов значений.Однако чтобы снизить количество ложных положительных результатов, данное правило требует явно указывать видимость типа для COM; содержащая тип сборка должна быть помечена атрибутом ComVisibleAttribute, для которого установлено значение false, а тип необходимо пометить атрибутом ComVisibleAttribute со значением true.
Устранение нарушений
Чтобы устранить нарушение данного правила для параметра, значение которого всегда можно представить 32-разрядным целым числом, измените тип параметра на Int32.Если значение параметра слишком велико для представления в виде 32-разрядного целого числа, измените тип параметра на Decimal.Обратите внимание, что при преобразовании в тип Single или Double происходит потеря точности в области верхней границы диапазона допустимых значений типа Int64.Если член не предназначен для взаимодействия с COM, пометьте его атрибутом ComVisibleAttribute со значением false.
Отключение предупреждений
Отключение предупреждений данного правила безопасно в том случае, если COM-клиенты Visual Basic 6 не получают доступ к типу.
Пример
В следующем примере показан тип, который нарушает данное правило.
Imports System
Imports System.Runtime.InteropServices
<Assembly: ComVisibleAttribute(False)>
Namespace InteroperabilityLibrary
<ComVisibleAttribute(True)> _
Public Class SomeClass
Public Sub LongArgument(argument As Long)
End Sub
End Class
End Namespace
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
[ComVisible(true)]
public class SomeClass
{
public void LongArgument(long argument) {}
}
}
Связанные правила
CA1413: избегайте использования не открытых полей в видимых типах значений COM
CA1407: не используйте статические члены в видимых COM типах
CA1017: помечайте сборки атрибутом ComVisibleAttribute
См. также
Ссылки
Тип данных Long (Visual Basic)