- PR -

Class、Namespaceの名称が同じだとエラーになる??(ソース有り)

投稿者投稿内容
ゆか
ベテラン
会議室デビュー日: 2004/04/06
投稿数: 75
投稿日時: 2007-02-07 18:46
いつも勉強させていただいております。今回は質問をさせていただけないでしょうか。

VB.NETで下記のようなサンプルのコードを書いてみました。

Namespace aa1
End Namespace
Namespace aa1
End Namespace
Public Class CC1
End Class
Public Class CC1
End Class

Classは同名だとエラーになりますが、Namespaceは同名でもエラーに
なりません。
これは、やっぱり言語仕様なのですよね。
どうも、釈然としないので投稿しました。
ClassとNamespace の根本的な意味合いが違うから、このような事になるの
でしょうか?
この事を理解できるような情報があれば、教えていただけないでしょうか。

それでは、よろしくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-02-07 19:05
?
Namespace がエラーになるとしたら、同じ名前空間に属するクラスはすべて一つのファイルに書かないといけなくなりますが?
_________________
囚人のジレンマな日々
イシバシ
常連さん
会議室デビュー日: 2007/02/06
投稿数: 20
お住まい・勤務地: 浦安の隣
投稿日時: 2007-02-07 20:33
学校の種類を名前空間と例え、
学校そのものをクラスと例えたとしましょ。

市川第一小学校、市川第二小学校はどちらも「市立.小学校」という名前空間。
でも学校名は一緒じゃだめ。

・・・例えが悪いかな?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-07 20:42
引用:

ゆかさんの書き込み (2007-02-07 18:46) より:

Classは同名だとエラーになりますが、


別々の名前空間であれば、エラーになりません。
そして、この時点で名前空間の役割に気付いて欲しいところです。

今回エラーになるのは、同名のクラスを同じ名前空間に定義していることになるからです。
これでは、そのクラスを限定する際に曖昧が生じますよね。

名前空間を別々にするとエラーにならないのは、名前空間とクラス名の組み合わせでユニークになるからです。
この名前空間とクラス名を組み合わせた完全なパスは、「完全修飾名」 と呼ばれます。

引用:

Namespaceは同名でもエラーになりません。
これは、やっぱり言語仕様なのですよね。


この名前空間なる概念を持っている言語は他にもたくさんありますが、このような仕様になっています。

引用:

どうも、釈然としないので投稿しました。
ClassとNamespace の根本的な意味合いが違うから、このような事になるのでしょうか?
この事を理解できるような情報があれば、教えていただけないでしょうか。


以前、どこかで書いたような気がしますが、
名前空間は、クラスならびに定義を組織化するための機構です。

名前の衝突を避けるために存在していると同時に、クラス群をまとめる役目をもっています。
これが、名前空間における組織化の概念です。
(Java で言う package に相当しますが、Java とは異なりスコープ的な意味を持ちません)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-07 20:53
引用:

イシバシさんの書き込み (2007-02-07 20:33) より:

学校の種類を名前空間と例え、
学校そのものをクラスと例えたとしましょ。

市川第一小学校、市川第二小学校はどちらも「市立.小学校」という名前空間。
でも学校名は一緒じゃだめ。

・・・例えが悪いかな?


このメタファを使うならば、

クラスを文字通り 'クラス' にたとえ、
名前空間を '学校名' にたとえたとしましょう。

「3年B組」 だけでは、どの '学校' か限定されませんが、
「桜中学校.3年B組」 とすれば、どの学校かまで限定され曖昧さがなくなります。

さらに '名前空間' は、ネストすることができます。
「桜中学校」 だけでは、完全に限定できないとすれば、'地区' を上位の名前空間に含めれば良いです。
つまり、「足立区立.桜中学校.3年B組」 とすれば、もっと広いスコープで限定することができます。

例文 : 「足立区立.桜中学校」 名前空間の 「3年B組」 クラスには、「金八先生」 というメンバが存在します。

# 最近のプログラミング言語って、本当に面白い指向になっていますよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-02-08 00:33
引用:

ゆかさんの書き込み (2007-02-07 18:46) より:

Classは同名だとエラーになりますが、Namespaceは同名でもエラーに
なりません。
これは、やっぱり言語仕様なのですよね。
どうも、釈然としないので投稿しました。


面白いご意見ですね。

どうして釈然としないのかを、もう少し詳しくお聞かせいただきたいです。
できましたら「どうあるべきか」という点についてもお聞かせいただきたいのですが。

お願いばかりで恐縮ですが、僕自身が、このような疑問を持ったことが無かったので純粋に興味があります。

_________________
R・田中一郎 @ わんくま同盟  -  R.Tanaka.Ichiro’s Blog ← ブログはじめました

[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2007-02-08 01:23 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2007-02-08 09:56
ゆかさん、お早うございます。

恐らく囚人さんの回答で納得されているのではないかと思いますが…。

これ↓はクラスを定義していますが、
引用:

Public Class CC1
End Class



しかしこちら↓は名前空間を定義している訳ではない、という事ですね。
引用:

Namespace aa1
End Namespace


ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-02-08 10:25
>しかしこちら↓は名前空間を定義している訳ではない、という事ですね。
え?そうなの?定義だと思ってた。
クラスで定義が重複した場合は重複を許さないのでエラー。
っても同じ名前空間じゃないとエラーにならんけど。
んで名前空間の場合は定義が重複していてもビルドの時に統合されるからエラーにならんだけだと理解していたが違うのか・・

スキルアップ/キャリアアップ(JOB@IT)