CA1406:避免對 Visual Basic 6 用戶端使用 Int64 引數
型別名稱 |
AvoidInt64ArgumentsForVB6Clients |
CheckId |
CA1406 |
分類 |
Microsoft.Interoperability |
中斷變更 |
中斷 |
原因
特別標記為元件物件模型 (COM) 可見的型別,會宣告採用 Int64 引數的成員。
規則描述
Visual Basic 6 COM 用戶端無法存取 64 位元整數。
根據預設,COM 可以看見下列各項:組件、公用型別、公用型別中的公用執行個體 (Instance) 成員,和公用實值型別的所有成員。但是,為了減少誤報的情形,這項規則要求必須明確陳述此型別的 COM 可視性、必須使用設定為 false 的 ComVisibleAttribute 來標記包含的組件,而且必須使用設定為 true 的 ComVisibleAttribute 來標記此型別。
如何修正違規
若要針對參數修正這個規則的違規情形,而這個參數的值一律是以 32 位元整數類表示,請將參數型別變更成 Int32。如果參數的值可能大於可用 32 位元整數類表示的值,請將參數型別變更成 Decimal。請注意,Single 及 Double 在 Int64 資料型別的範圍上限都會遺失精確度。如果不需要在 COM 中看到成員,請利用已設定為 false 的 ComVisibleAttribute 來標記它。
隱藏警告的時機
如果確定 Visual Basic 6 COM 用戶端不會存取該型別,則您可以放心地隱藏這項規則的警告。
範例
下列範例顯示違反規則的型別。
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 可見的實值類型中使用非公用欄位
CA1017:以 ComVisibleAttribute 標記組件