CA1406: Evitare gli argomenti Int64 per i client Visual Basic 6
TypeName |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
Category |
Microsoft.Interoperability |
Breaking Change |
Breaking |
Causa
Un tipo specificatamente contrassegnato come visibile a Component Object Model (COM) dichiara un membro che accetta un argomento System.Int64.
Descrizione della regola
I client COM Visual Basic 6 non sono in grado di accedere a Integer a 64 bit.
Per impostazione predefinita, i seguenti elementi sono visibili a COM: assembly, tipi pubblici, membri di istanza pubblici in tipi pubblici e tutti i membri di tipi di valore pubblici. Per ridurre i falsi positivi, tuttavia, la regola richiede che la visibilità COM del tipo sia dichiarata esplicitamente. L'assembly che lo contiene deve essere contrassegnato dall'impostazione dell'oggetto System.Runtime.InteropServices.ComVisibleAttribute su false mentre il tipo deve essere contrassegnato dall'impostazione dell'oggetto ComVisibleAttribute su true.
Come correggere le violazioni
Per correggere una violazione di questa regola per un parametro il cui valore può sempre essere espresso come integrale a 32 bit, modificare il tipo di parametro in System.Int32. Se il valore del parametro può essere maggiore di quanto è possibile esprimere con un integrale a 32 bit, modificare il tipo di parametro in System.Decimal. Si noti che sia per System.Single che per System.Double si determina una riduzione della precisione in corrispondenza degli intervalli superiori del tipo di dati Int64. Se non si intende rendere il membro visibile a COM, contrassegnarlo impostando ComVisibleAttribute su false.
Esclusione di avvisi
È possibile escludere senza rischi un avviso da questa regola se si è certi che i client COM Visual Basic 6 non accederanno al tipo.
Esempio
Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.
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) {}
}
}
Regole correlate
CA1413: Evitare i campi non pubblici nei tipi valore visibili a COM
CA1407: Evitare i membri statici nei tipi visibili a COM
CA1017: Contrassegnare gli assembly con ComVisibleAttribute
Vedere anche
Riferimenti
Tipo di dati Long (Visual Basic)