none
Namespace指定した自作クラスを、別ファイルで利用できない RRS feed

  • 質問

  • namespaceを指定して自分で作成したクラスを、別のクラスから利用したいのですが、
    指定の仕方がよくわかりません。Namespaceで指定した名前空間を、利用したいファイルで
    Imports指定しても使えないのです。どのように記述したらよいでしょうか。

    私はまず、下記のようなファイルを作成しました。

    ●Hoge.vb

    Namespace Hoge
        Public Class Hoge

            Private a As Integer

            Public Sub New(ByVal b As Integer)
                a = b
            End Sub

            Public Sub getVal()
                return a
            End Sub

        End Class
    End Namespace

    この自作クラスをForm1.vbから利用しようとして、Formに下記のように記述しました。

    ●Form1.vb

    Imports Hoge

    Public Class Form1

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim a As Hoge = New Hoge(100)
            (略)
        End Sub

    End Class

    でも、1行目のImportsのところに下線が引かれて下記のようなエラーが表示されてしまいます。
    (警告 1 インポート 'Hoge' で指定された名前空間または型が、パブリック メンバを含んでいないか、
    または見つかりません。名前空間または型が定義されていて、少なくとも 1 つのパブリック メンバを含んでいることを
    確認してください。また、インポートされた要素名がエイリアスを使用していないことを確認してください。)

    Namespaceに記述するネーミングに、何かルールのようなものがあるのでしょうか。
    もしご存知の方がいらっしゃればアドバイスお願いいたします。

    2006年5月31日 5:22

回答

  • えムナウさん、じゃんぬねっとさん、アドバイスありがとうございました。

    Imports プロジェクト名.Hogeと記述することで、エラーが解消されました。
    その後、ルート名前空間について勉強し、ソリューションエクスプローラから
    プロパティを選択して出てくるフォームの「ルート名前空間」の欄の設定が
    Imports で記述すべき名前空間名であることを理解しました。

    じゃんぬねっとさんに教えていただいて、初めてオブジェクトブラウザを
    見てみたのですが、自分の作ったクラスのメソッドや構造体が自動的に一覧表示されるので
    便利です。他のクラスの情報もリストアップされ、こんなメソッドがあるんだなーと
    思いました。

    >えムナウさん
    getValメソッドの件ですが、ご指摘のとおり記述ミスでした。申し訳ありません。
    手元のソースコードはこちらに書き込むには長いため、要点を抽出するための
    抜粋やネーミング変更の最中に間違って記述してしまいました。
    今後は気をつけます。

    どうもありがとうございました。

    2006年5月31日 7:16

すべての返信

  •  hiroya さんからの引用

            Public Sub getVal()
                return a
            End Sub

    Public Function getVal() As Integer
    ですね。
    ビルドしているんですよね?

     hiroya さんからの引用

    Imports Hoge



    Imports プロジェクト名.Hoge です。

    2006年5月31日 6:04
  • hiroya さん、えムナウさん、こんにちは。

     えムナウ さんからの引用
    Imports プロジェクト名.Hoge です。

    デフォルトではそうでしょうけど、ルート名前空間の設定によって、そうとは限らなくなります。

    ですので、こういう場合は、アセンブリを参照設定した後、
    オブジェクト ブラウザで確認するのが近道だと思います。

    オブジェクト ブラウザはデフォルトでは、[Ctrl] + [Alt] + [J] で起動します。
    この後、[シンボルの検索] を選択し、心当たりのクラス名やメンバ名で検索すると、名前空間を探索できます。

    2006年5月31日 6:47
  • えムナウさん、じゃんぬねっとさん、アドバイスありがとうございました。

    Imports プロジェクト名.Hogeと記述することで、エラーが解消されました。
    その後、ルート名前空間について勉強し、ソリューションエクスプローラから
    プロパティを選択して出てくるフォームの「ルート名前空間」の欄の設定が
    Imports で記述すべき名前空間名であることを理解しました。

    じゃんぬねっとさんに教えていただいて、初めてオブジェクトブラウザを
    見てみたのですが、自分の作ったクラスのメソッドや構造体が自動的に一覧表示されるので
    便利です。他のクラスの情報もリストアップされ、こんなメソッドがあるんだなーと
    思いました。

    >えムナウさん
    getValメソッドの件ですが、ご指摘のとおり記述ミスでした。申し訳ありません。
    手元のソースコードはこちらに書き込むには長いため、要点を抽出するための
    抜粋やネーミング変更の最中に間違って記述してしまいました。
    今後は気をつけます。

    どうもありがとうございました。

    2006年5月31日 7:16
  • じゃんぬさん。
    補足ありがとうございます。
    2006年5月31日 8:59