Publicで拾えない関数ってありますか?

解決


  2006-07-14 23:24:19  No: 132359

こんにちは良です。
いつもお世話になっております。

今私のクラスの中でPublicで宣言して
作った関数をほかのクラスから
呼ぼうと思ったんですが呼び出せなくて困っています。

ほかのクラスから呼び出そうとすると
「○○(関数の名前)は宣言されていません」
と出てしまいます。
  Publicで拾えないものってあるんですか?


  2006-07-14 23:24:45  No: 132360

環境はVB.NET2003 WinXpです。


  2006-07-14 23:33:57  No: 132361

ほかのクラスから使う場合にインスタンスを生成(私のフォームをNewする)
して私のクラスからその関数を指定すると使えるみたいですが、それだと
まるまる私のクラスを生成しなければいけないので
すごく重くなってしまうんですよ。インスタンスを生成しないでほかのクラスから呼び出せる方法ってないんですか?


ガッ  2006-07-14 23:42:03  No: 132362

・「○○(関数の名前)は宣言されていません」と出てしまいます。
  Publicで拾えないものってあるんですか
→良く分かりませんでした。
  再現可能な小さなコードを投下すれば私には分かります。

・インスタンスを生成しないでほかのクラスから呼び出せる方法ってないんですか?
→クラスメソッド、またはスタティックメソッドについてググってみてください。
  http://tinyurl.com/qumbx


  2006-07-15 00:12:04  No: 132363

こんにちは良です。

>ガッさん

お返事ありがとうございます。

たとえば

Public Class Form1

〜コード〜

Public Function ○○(ByVal〜)as Boolean

〜コード〜

end Function

〜コード〜

end Class

別のクラス

Public Class Form2

〜コード〜

Call ○○(引数)

〜コード〜

End Class

みたいな感じです。


  2006-07-15 00:21:19  No: 132364

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
こんな感じです。


ガッ  2006-07-15 00:25:24  No: 132365

少なくとも、オブジェクト指向として考えるのならば、「何の」という修飾する部分が必要です。
今回の良さんの○○メソッドは、「Form1のインスタンスの」という修飾が抜けているのでエラーが起こっているように思ってください。

解決法は、インスタンスメソッドなのでインスタンス化してそれを通して○○を呼び出すか、
(もう挙がっていますが)クラスメソッドに書き直すくらいでしょうか。


  2006-07-15 00:27:14  No: 132366

やっぱりほかのクラスで生成したものを使うには
クラス全体をインスタンスで生成してから
じゃないと無理ですか?

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


  2006-07-15 00:28:37  No: 132367

↑これだと生成するクラスが膨大な量だと
かなり処理が遅くなったりはしませんか?


  2006-07-15 00:39:52  No: 132368

すみません。とりあえずクラスを生成する方法でやります。
ありがとうございましたm(__)m


yokoshi  2006-07-15 01:19:53  No: 132369

知るか!!!


ガッ  2006-07-15 02:44:37  No: 132370

うーん、意思疎通ができてない…
・クラスで生成したもの
書かれているプログラムにこういう意味の部分が無いように見えるし…

で、これはクラスメソッドについて調べれば分かることなんだけど、
やっぱり調べてないんだろうなぁ。
('A`)


KG  2006-07-15 09:22:43  No: 132371

Moduleじゃダメだったんだろうか・・・


  2006-07-15 21:39:56  No: 132372

こんにちは良です。

>ガッさん
お返事ありがとうございました。
Publicについてずっと調べていました。
前にいってたクラスメソッドで調べるべきでしたね。
かなり勘違いしていました。
すみません。ありがとうございました。

>KGさん

お返事ありがとうございます。

Moduleにコピペして
しようと思ったんですが、この関数の中で
他の関数をたくさん呼び出していて
面倒なので途中でやめました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加