Visual Basic 6のVB.NETのCTypeに相当するキャスト式は何ですか?
6 に答える
あなたがキャストしているタイプに応じてそれらの数があります
cint() Cast to integer
cstr() cast to string
clng() cast to long
cdbl() cast to double
cdate() cast to date
また、暗黙のキャストがあるため、これを実行できますmyString = myInt
かなりの数の投稿者が質問を誤解しているように見えるので、質問を言い換えて、これまでに与えられた正しい答えを要約することで、問題を解決しようとします.
問題
ある型のデータを別の型にキャストしたい。私の VB.NET コードでは、
CType
これを行うために使用します。ただし、CType
VB6 で使用しようとすると、「サブまたは関数が定義されていません」というエラーが表示されます。では、動作しない場合、どのように VB6 でキャストを実行できCType
ますか?
解決
お気づきかもしれませんが、VB6 にはCType
VB.NET のような機能がありません。ただし、CInt や CStr など、VB.NET コードで遭遇する可能性のある他の変換関数 (名前が で始まるものC
) は VB6 に存在し、それらを使用して非オブジェクトとの間で変換できます。種類。あるクラスのオブジェクトを別のクラスのオブジェクトに変換する組み込み関数はありません。VB.NET とは異なり、VB6 は継承をサポートしていないことに注意してください。VB6 のクラスは 1 つ以上のインターフェイスを実装できますが、別のクラスから継承することはできません。ただし、オブジェクトのクラスが複数のインターフェースを実装している場合は、Set
ステートメントを使用して、オブジェクトをサポートするインターフェースの 1 つにキャストすることができます (Ant が提案したように)。Ant のコード例の拡張バージョンを以下に示します。
例: サポートされているインターフェースのいずれかにクラスをキャストする
Dim base As BaseClass
Dim child As ChildClass 'implements BaseClass'
Set child = New ChildClass
Set base = child '"Cast" child to BaseClass'
VB6 の組み込み型変換関数
以下は、VB6 ヘルプ ファイルから直接取得した、VB6 で使用可能な組み込み変換関数の完全なリストです。
Cブール
戻り値
Boolean
説明
式をブール値に変換します。
式の引数の範囲:
有効な文字列または数値式。
Cバイト
戻り値
Byte
説明
式をバイトに変換します。
式の引数の範囲:
0 ~ 255。
CCur
戻り値
Currency
説明
式を通貨に変換します。
式の引数の範囲:
-922,337,203,685,477.5808 から 922,337,203,685,477.5807.
日付
戻り値
Date
説明
式を日付に変換します。
式の引数の範囲:
有効な日付式。
CDbl
戻り値
Double
説明
式を Double に変換します。
式の引数の範囲:
負の値の場合は -1.79769313486232E308 ~ -4.94065645841247E-324。正の値の場合、4.94065645841247E-324 から 1.79769313486232E308。
CDec
戻り値
Decimal
説明
式を Decimal に変換します。
式の引数の範囲:
+/-79,228,162,514,264,337,593,543,950,335 ゼロ スケールの数値、つまり小数点以下の桁数がない数値の場合。小数点以下 28 桁の数値の場合、範囲は +/-7.9228162514264337593543950335 です。最小のゼロ以外の数値は 0.000000000000000000000000001 です。
CInt
戻り値
Integer
説明
式を Long に変換します。
式の引数の範囲:
-32,768 ~ 32,767; 分数は丸めます。
CLng
戻り値
Long
説明
式を Long に変換します。
式の引数の範囲:
-2,147,483,648 ~ 2,147,483,647; 分数は丸めます。
CSng
戻り値
Single
説明
式を Single に変換します。
式の引数の範囲:
負の値の場合は -3.402823E38 ~ -1.401298E-45。正の値の場合は 1.401298E-45 ~ 3.402823E38。
CStr
戻り値
String
説明
式を文字列に変換します。
式の引数の範囲:
CStr の戻り値は、式の引数によって異なります。
CVar
戻り値
Variant
説明
式をバリアントに変換します。
式の引数の範囲:
数値の Double と同じ範囲。数値以外の文字列と同じ範囲。
BaseClass にキャストしたい ChildClass (子) のオブジェクトがあるとします。これをして:
Dim base As BaseClass
Set base = child
VB6 がコンパイル時のタイプ セーフを処理する方法により、追加の構文を使用せずにそれを行うことができます。
注:他の誰もが言及しているように見えることを考えるとCType
、私は質問を完全に誤解している可能性があります。その場合は申し訳ありません!
既に述べたキャストは正しいですが、タイプがオブジェクトの場合、次のように VB6 で "Set" を使用する必要があります。
If IsObject(Value) Then
Set myObject = Value ' VB6 does not have CType(Value, MyObjectType)
Else
myObject = Value ' VB6 does not have CType(Value, MyObjectType)
End If
もちろん、それはキャスト先のタイプによって異なります。ほとんどすべてのユーザー クラスは、Collection、Dictionary などと同様にオブジェクトです。long、integer、boolean などの組み込み型は、明らかにオブジェクトではありません。
Ctype()私は信じています。C *(CDate()、CStr()など)は、ほとんどの場合、ホールドオーバーです。
変換は「キャスト」ではありません。たとえば、次を試してください。
MsgBox CLng(CBool(3&))
結果は 3 ではなく -1 です。これは、これらがキャストではなく変換関数であるためです。語学は大事!