こんにちは良です。
いつもお世話になっております。
今私のクラスの中でPublicで宣言して
作った関数をほかのクラスから
呼ぼうと思ったんですが呼び出せなくて困っています。
ほかのクラスから呼び出そうとすると
「○○(関数の名前)は宣言されていません」
と出てしまいます。
Publicで拾えないものってあるんですか?
環境はVB.NET2003 WinXpです。
ほかのクラスから使う場合にインスタンスを生成(私のフォームをNewする)
して私のクラスからその関数を指定すると使えるみたいですが、それだと
まるまる私のクラスを生成しなければいけないので
すごく重くなってしまうんですよ。インスタンスを生成しないでほかのクラスから呼び出せる方法ってないんですか?
・「○○(関数の名前)は宣言されていません」と出てしまいます。
Publicで拾えないものってあるんですか
→良く分かりませんでした。
再現可能な小さなコードを投下すれば私には分かります。
・インスタンスを生成しないでほかのクラスから呼び出せる方法ってないんですか?
→クラスメソッド、またはスタティックメソッドについてググってみてください。
http://tinyurl.com/qumbx
こんにちは良です。
>ガッさん
お返事ありがとうございます。
たとえば
Public Class Form1
〜コード〜
Public Function ○○(ByVal〜)as Boolean
〜コード〜
end Function
〜コード〜
end Class
別のクラス
Public Class Form2
〜コード〜
Call ○○(引数)
〜コード〜
End Class
みたいな感じです。
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call Keisan()
End Sub
End Class
Public Class Class1
Public Sub Keisan()
Dim intSumResult As Integer
intSumResult = 1 + 1
End Sub
End Class
こんな感じです。
少なくとも、オブジェクト指向として考えるのならば、「何の」という修飾する部分が必要です。
今回の良さんの○○メソッドは、「Form1のインスタンスの」という修飾が抜けているのでエラーが起こっているように思ってください。
解決法は、インスタンスメソッドなのでインスタンス化してそれを通して○○を呼び出すか、
(もう挙がっていますが)クラスメソッドに書き直すくらいでしょうか。
やっぱりほかのクラスで生成したものを使うには
クラス全体をインスタンスで生成してから
じゃないと無理ですか?
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Class1 As New Class1
Me.TextBox1.Text = Class1.Keisan()
End Sub
End Class
Public Class Class1
Public Function Keisan()
Dim intSumResult As Integer
intSumResult = 1 + 1
Return intSumResult
End Function
End Class
↑これだと生成するクラスが膨大な量だと
かなり処理が遅くなったりはしませんか?
すみません。とりあえずクラスを生成する方法でやります。
ありがとうございましたm(__)m
知るか!!!
うーん、意思疎通ができてない…
・クラスで生成したもの
書かれているプログラムにこういう意味の部分が無いように見えるし…
で、これはクラスメソッドについて調べれば分かることなんだけど、
やっぱり調べてないんだろうなぁ。
('A`)
Moduleじゃダメだったんだろうか・・・
こんにちは良です。
>ガッさん
お返事ありがとうございました。
Publicについてずっと調べていました。
前にいってたクラスメソッドで調べるべきでしたね。
かなり勘違いしていました。
すみません。ありがとうございました。
>KGさん
お返事ありがとうございます。
Moduleにコピペして
しようと思ったんですが、この関数の中で
他の関数をたくさん呼び出していて
面倒なので途中でやめました。
ありがとうございました。
ツイート | ![]() |