VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2004/11/05(Fri) 15:07
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^2: Setコマンドが省略できない理由

自分で「プロパティ」を実装してみると、わかるかも知れませんね。
代入プロパティの宣言には、「Property Let」と「Propert Set」という2種類がありますから。

ちなみに、Pictureオブジェクトの代入に対しては、
  Set Picture1.Picutre = LoadPicture("C:\A.BMP")
と、
  Picture1.Picutre = LoadPicture("C:\A.BMP")
のどちらの構文も使えます。


本来であれば、Pictureオブジェクトの代入時にも、Setを使うべきなのですが、
古いバージョンとの互換性維持のため、後者の記述も例外的にサポートされています。

ただ、Setを使わなくて良いのは、「標準コントロール」の場合だけであり、
ActiveXコントロールの場合は、Setを使って代入しなければなりませんので、
結局の所、「オブジェクトの代入では、常にSetを使う」と覚えておくのが吉でしょうね。


> > Dimが省略された場合はVariantで単純変数ですわね。
Option Explicitを有効にしている場合は、Dimは省略できませんね。
(その場合でも、As句の記載を省略する事はできますが)

で、より正確に表現するなら、「Variant型になる」というよりは、
「規定のデータ型になる」という事ですね。
(規定のデータ型の指定も無い場合は、Variantが使われる)


> 以下のコードを実行してみれば省略できない理由がわかるかも

代入時は、Setが使えるから良いのですが、引数指定で渡すときには、
処理が曖昧になるので、厄介なんですよね…。

  Dim RS As ADODB.Recordset
  Set RS = New ADODB.Recordset
  RS.Fields.Append "NUMBER", adInteger
  RS.Open
  RS.AddNew "NUMBER", 123456

  '========
 ' 括弧を付けるだけで、結果が変化します。
  '========
  Debug.Print TypeName(  RS  )
  Debug.Print TypeName( (RS) )
  Debug.Print TypeName(  RS() )

  Debug.Print TypeName(   RS!Number   )
  Debug.Print TypeName(  (RS!Number)  )
  Debug.Print TypeName(  RS!Number()  )
  Debug.Print TypeName( (RS!Number()) )
  Debug.Print TypeName( RS!Number()() )

# それぞれの TypeName 関数が、どのような値を返すのかを、
# 実行せずに正しく答えられるようなら、上級者と呼べるかな。(^^;


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

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -