DOBON.NET DOBON.NETプログラミング掲示板過去ログ

パーシャルクラスと名前空間について

環境/言語:[VB.NET .NET Framework 2.0]
分類:[.NET]

表題についてお尋ねします。
まず、あるファイルに下記のような定義で作成されたクラスがあったとします。

Namespace hoge

    Partial Class A
        Sub msg1()
            MsgBox("msg1")
        End Sub
    End Class

End Namespace


次に機能の拡張等で別ファイルに下記のクラスを定義したとします。


Partial Class A
    Sub msg2()
        MsgBox("msg2")
    End Sub
End Class


そして以下のように呼び出そうとするとエラーとなります。


Dim objA2 As New hoge.A

objA2.msg1()
objA2.msg2() '←メンバではありません


クラスビューで見ても後で作成したクラスの方は元クラスの名前空間
に含まれていないようです。これは仕様でしょうか?
後で作成したクラスの方にも同じ名前空間を記述すればよいのですが、
複数人で作業する場合等にできれば名前空間は共有したいと思っています。
(名前空間名の修正箇所や名前空間を1文字間違えただけでも呼び出せなくなってしまう等の問題のため)
何か方法はありますでしょうか。
■No19629に返信(緑龍さんの記事)

> クラスビューで見ても後で作成したクラスの方は元クラスの名前空間
> に含まれていないようです。これは仕様でしょうか?

はい。
クラス名が同じでも名前空間が違うと、違うクラスとみなされます。

> (名前空間名の修正箇所や名前空間を1文字間違えただけでも呼び出せなくなってしまう等の問題のため)

クラス名についても全く同じことが言えませんか?
名前空間名なんて、そんなに頻繁に変更するとは思えませんが、変更する可能性を考えるなら、同じくらいには、クラス名が変更される可能性もあると思います。その時は、全てのファイルを修正しなければなりませんよね。
呼び出すときだって、クラス名やメソッド名は1文字たりとも間違えてはなりません。
シャノンさん、素早い回答ありがとうございました。

> クラス名が同じでも名前空間が違うと、違うクラスとみなされます。
そうなのですね。
普通のクラスはわかるのですが、パーシャルクラスではひとつのクラス
が違う名前空間で分割されるイメージなのでしょうか。。。

> 呼び出すときだって、クラス名やメソッド名は1文字たりとも間違えてはなりません。
説明不足ですいません、間違えるのは作成者の方で名前空間hogeをmogeとか
書き間違えるという意味でした。

> 名前空間名なんて、そんなに頻繁に変更するとは思えませんが、
例えば名前空間を「会社名.製品名.機能名」とかしている場合に製品名の部分
が後で変更になる可能性とかを想定していました。
Namespace.vbとかいうファイルに一括して名前空間の定義と空のパーシャル
クラスを用意して本体のクラスは別に書くというような用途では使えないという
ことなのですね。よくわかりました。
>> クラス名が同じでも名前空間が違うと、違うクラスとみなされます。
>そうなのですね。
>普通のクラスはわかるのですが、パーシャルクラスではひとつのクラス
>が違う名前空間で分割されるイメージなのでしょうか。。。

ちがいます。
名前空間も、クラスも同一のものを別ファイルにするだけです。
■No19633に返信(緑龍さんの記事)
>>呼び出すときだって、クラス名やメソッド名は1文字たりとも間違えてはなりません。
> 説明不足ですいません、間違えるのは作成者の方で名前空間hogeをmogeとか
> 書き間違えるという意味でした。

だとしても、「間違えるな」で終わりなのですよ。
例えば、

Partial Class Moge
End Class

Partial Class Hoge ' マチガエタ!
End Class

は、別のクラス宣言になってしまいます。
気をつけるしかないでしょう。

DOBON.NET | プログラミング道 | プログラミング掲示板