クラスまたは構造体の演算子プロシージャを定義する演算子シンボル、オペランド、およびコードを宣言します。
構文
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
部品
attrlist
任意。
属性リストを参照してください。
Public
必須。 この演算子プロシージャが パブリック アクセス権を持っていることを示します。
Overloads
任意。 「 オーバーロード」を参照してください。
Shared
必須。 この演算子プロシージャが Shared プロシージャであることを示します。
Shadows
任意。 「 影」を参照してください。
Widening
Narrowing
を指定しない限り、変換演算子に必要です。 この演算子プロシージャが 拡大 変換を定義することを示します。 このヘルプ ページの「拡大変換と縮小変換」を参照してください。
Narrowing
Widening
を指定しない限り、変換演算子に必要です。 この演算子プロシージャが 縮小 変換を定義することを示します。 このヘルプ ページの「拡大変換と縮小変換」を参照してください。
operatorsymbol
必須。 この演算子プロシージャが定義する演算子のシンボルまたは識別子。
operand1
必須。 単項演算子 (変換演算子を含む) の単一オペランドの名前と型、または二項演算子の左オペランド。
operand2
二項演算子に必要です。 二項演算子の右オペランドの名前と型。
operand1
および operand2
には、次の構文と部分があります。
[ ByVal ] operandname [ As operandtype ]
部分 | 説明 |
---|---|
ByVal |
省略可能ですが、渡すメカニズムは ByVal である必要があります。 |
operandname |
必須。 このオペランドを表す変数の名前。 「宣言された要素名」を参照してください。 |
operandtype |
Option Strict がOn されていない限り、省略可能です。 このオペランドのデータ型。 |
type
Option Strict
がOn
されていない限り、省略可能です。 演算子プロシージャが返す値のデータ型。
statements
任意。 演算子プロシージャが実行するステートメントのブロック。
returnvalue
必須。 演算子プロシージャが呼び出し元のコードに返す値。
End
Operator
必須。 この演算子プロシージャの定義を終了します。
注釈
Operator
は、クラスまたは構造体でのみ使用できます。 つまり、演算子の 宣言コンテキスト をソース ファイル、名前空間、モジュール、インターフェイス、プロシージャ、またはブロックにすることはできません。 詳細については、「 宣言コンテキストと既定のアクセス レベル」を参照してください。
すべての演算子は Public Shared
する必要があります。 どちらのオペランドにも ByRef
、 Optional
、または ParamArray
を指定することはできません。
戻り値を保持するために演算子シンボルまたは識別子を使用することはできません。
Return
ステートメントを使用し、値を指定する必要があります。 プロシージャ内の任意の数の Return
ステートメントを指定できます。
この方法で演算子を定義することは、Overloads
キーワードを使用するかどうかに関係なく、演算子のオーバーロードと呼ばれます。 次の表に、定義できる演算子を示します。
タイプ | オペレーター |
---|---|
単項演算子 |
+ 、 - 、 IsFalse 、 IsTrue 、 Not |
バイナリ |
+ 、- 、* 、/ 、\ 、& 、^ 、>> 、<< 、= 、<> 、> 、>= 、< 、<= 、And 、Like 、Mod 、Or 、Xor |
変換 (単項) | CType |
二項リストの =
演算子は比較演算子であり、代入演算子ではないことに注意してください。
CType
を定義するときは、Widening
またはNarrowing
を指定する必要があります。
一致したペア
一致するペアとして特定の演算子を定義する必要があります。 このようなペアのいずれかの演算子を定義する場合は、もう一方の演算子も定義する必要があります。 一致するペアは次のとおりです。
=
と<>
>
と<
>=
と<=
IsTrue
とIsFalse
データ型の制限
定義するすべての演算子には、定義するクラスまたは構造体が含まれている必要があります。 つまり、クラスまたは構造体は、次のデータ型として表示される必要があります。
単項演算子のオペランド。
2 項演算子のオペランドの少なくとも 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
宣言する場合、プロシージャ コードでエラーが生成されないようにする必要があります。 これは、次のことを意味します。
type
型の有効な値を常に返す必要があります。考えられるすべての例外とその他のエラー条件を処理する必要があります。
呼び出すプロシージャから返されたエラーを処理する必要があります。
変換プロシージャが成功しない可能性がある場合、またはハンドルされない例外が発生する可能性がある場合は、 Narrowing
宣言する必要があります。
例
次のコード例では、 Operator
ステートメントを使用して、 And
、 Or
、 IsFalse
、および IsTrue
演算子の演算子プロシージャを含む構造体のアウトラインを定義します。
And
Or
は、それぞれabc
型と戻り値の型abc
の 2 つのオペランドを受け取ります。
IsFalse
各 IsTrue
は、 abc
型の単一オペランドを受け取り、 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