Operator Statement
クラスまたは構造体に演算子プロシージャを定義する演算子シンボル、オペランド、およびコードを宣言します。
構文
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
指定項目
attrlist
任意。 「属性リスト」を参照してください。
Public
必須です。 この演算子プロシージャが Public アクセス権を持つことを示します。
Overloads
任意。 「Overloads」を参照してください。
Shared
必須です。 この演算子プロシージャが Sharedプロシージャであることを示します。
Shadows
任意。 「Shadows」を参照してください。
Widening
Narrowing
を指定しない場合、変換演算子に必須です。 この演算子プロシージャでは、拡大変換を定義していることを示します。 このヘルプページの「拡大変換と縮小変換」を参照してください。
Narrowing
Widening
を指定しない場合、変換演算子に必須です。 この演算子プロシージャでは、縮小変換を定義していることを示します。 このヘルプページの「拡大変換と縮小変換」を参照してください。
operatorsymbol
必須です。 この演算子プロシージャで定義する演算子のシンボルまたは識別子。
operand1
必須です。 単項演算子 (変換演算子を含む) の 1 つのオペランドまたは二項演算子の左オペランドの名前と型。
operand2
二項演算子に必須です。 二項演算子の右オペランドの名前と型。
operand1
と operand2
の構文と指定項目は次のとおりです。
[ ByVal ] operandname [ As operandtype ]
パーツ | 説明 |
---|---|
ByVal |
省略可能ですが、引渡し方法は ByVal にする必要があります。 |
operandname |
必須です。 このオペランドを表す変数の名前。 「 Declared Element Names」を参照してください。 |
operandtype |
Option Strict が On である場合を除き、省略可能です。 このオペランドのデータ型。 |
type
Option Strict
が On
である場合を除き、省略可能です。 演算子プロシージャで返される値のデータ型。
statements
任意。 演算子プロシージャで実行されるステートメントのブロック。
returnvalue
必須です。 演算子プロシージャから呼び出し元のコードに返される値。
End
Operator
必須です。 この演算子プロシージャの定義を終了します。
Remarks
Operator
は、クラスまたは構造体でのみ使用できます。 つまり、演算子の宣言コンテキストは、ソース ファイル、名前空間、モジュール、インターフェイス、プロシージャ、ブロックにすることができません。 詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。
すべての演算子は Public Shared
である必要があります。 どのオペランドにも ByRef
、Optional
、ParamArray
を指定することはできません。
戻り値を保持するために、演算子シンボルや識別子を使用することはできません。 Return
ステートメントを使用する必要があり、それによって値を指定する必要があります。 任意の数の Return
ステートメントをプロシージャ内の任意の場所に記述できます。
この方法で演算子を定義することは、Overloads
キーワードを使用するかどうかにかかわらず、演算子のオーバーロードと呼ばれます。 定義可能な演算子を次の表に示します。
種類 | 演算子 |
---|---|
単項 | + , - , IsFalse , IsTrue , Not |
2 項 | + , - , * , / , \ , & , ^ , >> , << , = , <> , > , >= , < , <= , And , Like , Mod , Or , Xor |
変換 (単項) | CType |
2 項の一覧に示した =
演算子は比較演算子であり、代入演算子ではありません。
CType
を定義する場合、Widening
または Narrowing
のどちらかを指定する必要があります。
一致したペア
特定の演算子を一致したペアとして定義する必要があります。 そのようなペアのどちらかの演算子を定義する場合は、他方の演算子も定義する必要があります。 一致したペアは次のとおりです。
=
および<>
>
および<
>=
および<=
IsTrue
およびIsFalse
データ型の制限
定義するすべての演算子には、それを定義するクラスまたは構造体が関係している必要があります。 つまり、クラスまたは構造体が、次のデータ型として指定されている必要があります。
単項演算子のオペランド。
二項演算子の少なくとも 1 つのオペランド。
変換演算子のオペランドまたは戻り値の型。
特定の演算子には、次のような追加のデータ型の制限があります。
IsTrue
演算子とIsFalse
演算子を定義する場合、それらはどちらもBoolean
型を返す必要があります。<<
演算子と>>
演算子を定義する場合、それらはどちらもoperand2
のoperandtype
にInteger
型を指定する必要があります。
戻り値の型は、どちらかのオペランドの型に対応している必要はありません。 たとえば、=
や <>
などの比較演算子では、どちらのオペランドも Boolean
でない場合でも Boolean
を返すことができます。
論理演算子とビット処理演算子
And
、Or
、Not
、および Xor
の各演算子では、Visual Basic で論理演算またはビットごとの演算を実行できます。 ただし、クラスまたは構造体でこれらの演算子のいずれかを定義した場合は、そのビットごとの演算のみを定義できます。
Operator
ステートメントで、AndAlso
演算子を直接定義することはできません。 ただし、次の条件を満たしている場合は、AndAlso
を使用できます。
AndAlso
に使用する同じオペランド型に対してAnd
を定義している。And
の定義で、それを定義したクラスまたは構造体と同じ型を返す。And
を定義したクラスまたは構造体にIsFalse
演算子を定義している。
同様に、クラスまたは構造体の戻り値の型で同じオペランドに対して Or
を定義し、クラスまたは構造体に IsTrue
を定義している場合、OrElse
を使用できます。
Widening and Narrowing Conversions
拡大変換は実行時に常に成功しますが、縮小変換は実行時に失敗する可能性があります。 詳細については、「 Widening and Narrowing Conversions」を参照してください。
変換プロシージャを Widening
として宣言する場合、プロシージャ コードでエラーが発生しないようにする必要があります。 これは、次のことを意味します。
常に
type
型の有効な値を返す必要があります。これは、可能性のあるすべての例外とその他のエラー条件を処理する必要があります。
これが呼び出すすべてのプロシージャからのエラーを処理する必要があります。
変換プロシージャが成功しない可能性がある場合、または未処理の例外が発生する可能性がある場合は、それを Narrowing
として宣言する必要があります。
例
次のコード例では、Operator
ステートメントを使用して、And
、Or
、IsFalse
、および IsTrue
演算子の演算子プロシージャを含む構造体のアウトラインを定義しています。 And
および Or
は、それぞれ abc
型の 2 つのオペランドを受け取り、abc
型を返します。 IsFalse
および IsTrue
は、それぞれ abc
型の 1 つのオペランドを受け取り、Boolean
型を返します。 これらの定義により、呼び出し元のコードでは、abc
型のオペランドを使用して、And
、AndAlso
、Or
、および OrElse
を使用できます。
Public Structure abc
Dim d As Date
Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc
Dim r As New abc
' Insert code to calculate And of x and y.
Return r
End Operator
Public Shared Operator Or(ByVal x As abc, ByVal y As abc) As abc
Dim r As New abc
' Insert code to calculate Or of x and y.
Return r
End Operator
Public Shared Operator IsFalse(ByVal z As abc) As Boolean
Dim b As Boolean
' Insert code to calculate IsFalse of z.
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As abc) As Boolean
Dim b As Boolean
' Insert code to calculate IsTrue of z.
Return b
End Operator
End Structure
関連項目
.NET