tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: CTYPEとは?
投稿日: 2007/06/05(Tue) 02:26
投稿者魔界の仮面弁士
> #Visual Basic が例外をスローします。
> #実行時に変換が失敗すると、適切な例外がスローされます。
> スローとはなんでしょうか?投げる?

その通り『投げる』です。{Throw ステートメントを参照}

別の言い方に変えてみると、「適切な・例外が・スローされます」という文章は
「失敗の理由に応じた・実行時エラーが・発生します」のような文意となります。

投げられた例外は、どこかで『捕らえ』なければいけません。{Catch ステートメントを参照}
そして例外を捕らえる処理のことを、「例外処理」「エラートラップ」などと呼びます。

なお、Throw された例外が誰にも Catch されなかった場合は、アプリケーションエラーとなります。


> #CType はオーバーロードされた演算子として機能します。
> オーバーロードとは何でしょうか?

overload という用語は、ときには日本語で「多重定義」と表現される事があります。

たとえば…….NET Framework の「MessageBox.Show」というメソッドには、
 MessageBox.Show("あいうえお")
 MessageBox.Show("あいうえお", "かきくけこ")
 MessageBox.Show("あいうえお", "かきくけこ", MessageBoxButtons.YesNo)
 MessageBox.Show("あいうえお", "かきくけこ", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
のように、引数の数やデータ型の異なる複数の定義が存在します。

このように、『メソッド名は同じだが、引数の数や型を変えて定義された複数のメソッド』を、
「オーバーロードされたメソッド」と呼びます。

また、標準のメソッドに対して、別の引数定義を持ったを物を追加することは、
「メソッドをオーバーロードする」などと呼ばれます。

そして、『演算子のオーバーロード』も同様です。
標準では存在しない演算子の定義を、自分で追加できるのです。

たとえば、すべての構造体やクラスは、標準で「Object 型への暗黙の型変換」と
「Object 型からの明示的な型変換」ができるようになっています。

そして、自分で「型変換演算子をオーバーロード」すると、Object 型だけでなく、
他の型との間の変換機能を追加することが可能なのです。

たとえば……
 Structure 個人
  Public 姓 As String
  Public 名 As String
 End Structure
という構造体があったとして、それに対して
 Dim X As 個人 = "東国原 英夫"
のような変換を行うとエラーとなりますよね。

しかし、CType 演算子をオーバーロードして、
 Structure 個人
  Public 姓 As String
  Public 名 As String

  Shared Widening Operator CType(ByVal value As String) As 個人
   Dim s() As String = value.Split(" "c)
   Dim x As New 個人()
   x.姓 = s(0)
   If s.Length <> 1 Then
    x.名 = s(1)
   End If
   Return x
  End Operator
 End Structure
などとしておけば、先の
 Dim X As 個人 = "東国原 英夫"
のような暗黙変換が行えるようになるわけです。


> #CType は、インラインでコンパイルされます。
> インラインとは何でしょうか?

inline。直訳では「文中」「行内」などの意味です。

コンパイラの動作に絡んでくる部分なので、詳しくは説明しにくいのですが、大雑把に言えば、
サブルーチン/関数呼び出しにしないコードを意味するコンピュータ用語…といったところかと。
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E5%B1%95%E9%96%8B


# ……って、こんな説明で分かってもらえるかなぁ。(^^;

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。