- PR -

名前空間の途中から参照することは可能か

1
投稿者投稿内容
KYO
会議室デビュー日: 2005/10/31
投稿数: 19
投稿日時: 2006-01-11 11:28
いつもお世話になっております。

ちょっと疑問に思ったのですが、異なるプロジェクトから参照したときに名前空間直下のクラスしか参照できないのでしょうか?同一プロジェクト(同一namespace?)からは問題ないのですが。

例えば、namespace A.B.C.D のクラス C1 というクラスがあるとして、別プロジェクトから using A.B.C を宣言し、D.C1.KEY だと参照できません。using で A.B.C.D を宣言して C1.KEY すると OK です。

↓な感じです。


【プロジェクト P1】
+++ C1.cs ++++++++++++++++++++++++++++++++++++++++++
namespace A.B.C.D
{
 public class C1
 {
  private C1(){}
  public const string KEY = "10";
 }
}
++++++++++++++++++++++++++++++++++++++++++++++++++++

+++ C2.cs ++++++++++++++++++++++++++++++++++++++++++
namespace A.B.C
{
 public class C2
 {
  private C2(){}
  public void M1
  {
   string string1 = A.B.C.D.C1.KEY; // OK
   string string2 = D.C1.KEY;    // OK
  }
  
 }
}
++++++++++++++++++++++++++++++++++++++++++++++++++++


【プロジェクト P2】
参照設定で P1 を追加
+++ C3.cs ++++++++++++++++++++++++++++++++++++++++++
using A.B.C
namespace A.B
{
 public class C3
 {
  private C3(){}
  public void M1
  {
   string string1 = A.B.C.D.C1.KEY; // OK
   string string2 = D.C1.KEY;    // NG[型または名前空間名 'D' が見つかりませんでした。ディレクティブを使うかアセンブリ参照を使ってください。]
   string string3 = C.D.C1.KEY;   // 同様のエラー
  }
  
 }
}
++++++++++++++++++++++++++++++++++++++++++++++++++++
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 11:49
Namespace は、できないでしょうね。
省略したい Namespace 以降の Namespace が衝突していたら曖昧になるからでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2006-01-11 11:52
異なるプロジェクトとかは関係ないですね。
C#は、途中からはだめみたいです。

using ABC = A.B.C;
なんてするのはどうです?


そういえば昔ネームスペースの話が出たな〜と思い出した。
参考:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3936&forum=7
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-01-11 11:53
こんにちは。

using D = A.B.C.D

にするとか。

因みに
コード:
namespace A.B 
{
    using C.D;


とかもできますね。

_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 12:03
引用:

一郎さんの書き込み (2006-01-11 11:52) より:

異なるプロジェクトとかは関係ないですね。
C#は、途中からはだめみたいです。


参照したい名前空間と「同じルートに所属している名前空間の場合」のことを、
「同一プロジェクトの場合」と誤解されているのだと思います。
(うわ、読みにくい日本語...)

---

そもそも、名前空間は「名前の競合」を避けることを目的としているので、
クラス名と同じような考えはできない (見づらくなる) のでしょうね。
だから、所属している名前空間外からは「(名前空間は) 完全限定名」指定しなくてはいけないのでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KYO
会議室デビュー日: 2005/10/31
投稿数: 19
投稿日時: 2006-01-11 12:46
なるほどです。
エイリアス(といってよいのか?)宣言しておけば行けましたね。

でも、まぁ、あまりよろしくなさそうなので、
素直に using A.B.C.D で宣言して C1.KEY で参照します。
作業中に参照できなくて気になったので、質問させてもらいました。
みなさん、ありがとうございます。



[ メッセージ編集済み 編集者: KYO 編集日時 2006-01-11 13:08 ]
1

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