■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#22469-0クラスの宣言コザック2001-08-16(木) 18:01
     #22471-0RE#22469:クラスの宣言よねKEN2001-08-16(木) 19:12
     #22482-0RE#22471:クラスの宣言コザック2001-08-17(金) 10:45
#22469-0
クラスの宣言
クラスの宣言は、BASでないとpublicで宣言できない
ですが、そうするとプロジェクトが起動した時点でclassが
setされるので好ましくないと聞いたのですがそうなんでしょうか。
formでDim class as new classaと定義して、form内でclassを使用
する分にはいいんですけど,bas内でclassを使用する時にはform自体
をパラメータで渡して使用しなければなりません。
<--form-->
Private Sub Form_Load()
  Call bas_call(Me)
end sub
<--bas-->
Sub dll_call(Form1 As Form)
  Form1.class.Get_Syspath("System")
End Sub

classをbas内で使用する時には上記のようなやり方
が一般的なのでしょうか?
私は、basでpublic class as new classaと定義すれば
classをどこで呼ぼうがclass.Get_Syspath("System")で
いけるのでいいんじゃないかなと思うのですが。
#22471-0
RE#22469:クラスの宣言
> クラスの宣言は、BASでないとpublicで宣言できない

FormでもPublicで宣言できますよ。

> ですが、そうするとプロジェクトが起動した時点でclassが
> setされるので好ましくないと聞いたのですがそうなんでしょうか。

どう好ましくないのかわかりませんが、
Newを使ってクラス型の変数を宣言しているなら(ex. Public c As New Class1)、
メソッドやプロパティにアクセスした時点で、はじめてインスタンス(実体)が生成されます。
Newを使ってない宣言なら(ex. Public c as Class1)、
Set c = New Class1とした時点ではじめてインスタンスが生成されます。

> formでDim class as new classaと定義して、form内でclassを使用
> する分にはいいんですけど,bas内でclassを使用する時にはform自体
> をパラメータで渡して使用しなければなりません。
> <--form-->
> Private Sub Form_Load()
>   Call bas_call(Me)
> end sub
> <--bas-->
> Sub dll_call(Form1 As Form)
# dll_call → bas_callですよね?
>   Form1.class.Get_Syspath("System")
> End Sub
> 
> classをbas内で使用する時には上記のようなやり方
> が一般的なのでしょうか?

??? Form1にclassという変数(何らかのクラス型の)があるという状態なのだと思いますが、
それあれば、
Private Sub Form_Load()
   class.Get_Syspath("System")
End sub

で、よいと思いますが。

> 私は、basでpublic class as new classaと定義すれば
> classをどこで呼ぼうがclass.Get_Syspath("System")で
> いけるのでいいんじゃないかなと思うのですが。

そうです。
#22482-0
RE#22471:クラスの宣言
> > 私は、basでpublic class as new classaと定義すれば
> > classをどこで呼ぼうがclass.Get_Syspath("System")で
> > いけるのでいいんじゃないかなと思うのですが。
> 
> そうです。

こんな質問にお答え頂き誠にありがとうございました。
クラスを使用する時は、使い終わったら必ずNOTHINGをしないと
いつまでも実態が残るからダメと聞いていたもので、自分なりに
いろいろな本を調べてクラスのオブジェクト等を引数として渡して使用
しないとダメなのかなーと頭がぐちゃぐちゃになってました。
ですが標準モジュールでAS NEW指定する事によりプロジェクト内のどこでも
使用できるのでいいじゃんと思いこんな質問をしました。

「そうです。」の一言がすごく安心します。(^O^)
どうもありがとうございました。
ちなみにこのクラスはいろいろなプロジェクトに追加してあり
同時期に動くのですが、そういった場合でも問題ないのでしょうか。
例えば、AというクラスをプロジェクトXとプロジェクトYに追加していて
同時期にAというクラスを呼んだ場合に、解放されていないとかなんとか
という現象って起こりえるでしょうか?(プロジェクトが違うから関係ないのかな)
NOTHINGってしなきゃいけないのかな?
何か訳のわからない質問で申し訳ありません。
自分で書いていても何言ってるか分からなくなってきました。
このページと関連する記事:
#37947-0Nothingは必要でしょうか?2001-01-30(火) 18:35
#17102-0Implementsについて2000-12-14(木) 13:36
#38299-0オブジェクトの解放2001-02-06(火) 11:22
#463-0クラスの読み取り専用プロパティに値をセット2002-03-21(木) 17:01
#39723-0オブジェクトの引数渡しの違い2001-03-02(金) 14:24
#19592-0クラスについて教えてください2001-03-15(木) 12:35
#25261-0レスポンスの悪化について2001-12-11(火) 11:51
#2883-1同じプログラムをひとまとめにしたい2002-09-10(火) 03:27
#18372-0フォームの作成と解放2000-03-23(木) 09:59
#1270-1VB.netでのオブジェクトの配列2004-03-03(水) 15:43
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)