CA1406: Unikaj argumentów Int64 dla klientów programu Visual Basic 6
TypeName |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
Kategoria |
Microsoft.Interoperability |
Zmiana kluczowa |
Kluczowa |
Przyczyna
Typ, który jest wyraźnie oznaczony jako widoczny dla Component Object Model (COM) deklaruje element członkowski, który przyjmuje argument Int64.
Opis reguły
Klienci Visual Basic 6 COM nie mogą uzyskać dostępu do 64-bitowych liczb całkowitych.
Domyślnie następujące elementy są widoczne dla COM: zestawy, typy publiczne, publiczne wystąpienia elementów człokowskich w typach publicznych oraz wszystkie elementy członkowskie o publicznych typach wartościowych.Jednak w celu zmniejszenia fałszywych wyników, ta reguła wymaga wyraźnie podanej widoczności typu COM; zawierające zestawy muszą być oznaczone ComVisibleAttribute ustawionym na false i typ musi być oznaczony ComVisibleAttribute ustawionym na true.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady dla parametru, którego wartość zawsze może być wyrażona jako 32-bitowa wartość integralna, należy zmienić typ parametru na Int32.Jeśli wartość parametru może być większa i nie może być wyrażona jako 32-bitowa wartość integralna, należy zmienić typ parametru na Decimal.Należy zauważyć, że zarówno Single i Double tracą precyzję w górnym zakresie typu danych Int64.Jeżeli element członkowski nie ma być widoczny dla modelu COM, należy oznaczyć go ComVisibleAttribute ustawionym na false.
Kiedy pominąć ostrzeżenia
Bezpiecznie jest pominąć ostrzeżenie od tej reguły, jeśli jest pewne, że klienci Visual Basic 6 COM nie będą mieć dostępu do typu.
Przykład
Poniższy przykład pokazuje typ, który narusza regułę.
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) {}
}
}
Powiązane reguły
CA1413: Unikaj pól niepublicznych w typach wartościowych widocznych dla modelu COM
CA1407: Unikaj statycznych elementów członkowskich w typach widocznych dla modelu COM
CA1017: Oznacz zestawy za pomocą ComVisibleAttribute
Zobacz też
Informacje
Long — Typ danych (Visual Basic)