C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: クラス名がライブラリのクラス名とダブってしまう場合


(過去ログ 50 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■27247 / inTopicNo.1)  クラス名がライブラリのクラス名とダブってしまう場合
  
□投稿者/ taguchi (42回)-(2008/10/31(Fri) 09:32:11)

分類:[C#] 

言語:VC#2005(.Net FrameWork2.0)

非常に基本的な事で恐縮です。
c#に限ったことではありませんが、
.netライブラリで提供されているクラスと同じ名前を使った場合に、
オブジェクトの参照順序の関係でコンパイルエラーが発生してしまいます。

この場合「global::クラス名」をつけてルートを明確にする事で解決できると思うのですが、
ユーザコンポーネント等を使った場合に出来る「デザイナで生成されたコード」の中のコードも
その対象になってしまう場合に、たとえばテキストをフォームに張り付ける毎に
global::を付けるのは面倒です。

例:
namespace AAA.System
{
    public class Hoge
    {

とした場合に、
デザイナで生成されたコード内

        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
                                ^^^^^^  
オブジェクトの参照順序はAAAを最初に参照してしまうのでエラーが発生してしまいます。

            this.textBox1 = new global::System.Windows.Forms.TextBox();
                                ^^^^^^ 

これで解決すると思うのですが・・・・
Designer.cs内にいちいちglobalを付けなくていい方法は無いのでしょうか?
それとも、面倒臭いなら最初から名前をかぶらないように命名するのが筋なのでしょうか?

そもそも名前が被らないように階層構造になっているのだと思うのですが、
これでは、クラスライブラリの名前を全部把握しておかなければならない事になる?ので、
意味を為さないのではないかと矛盾を感じております。
(↑自分が矛盾しているのかもしれませんが(^^;)

大変ぶしつけな質問で恐縮ですが、
アドバイスありましたらよろしくお願いいたします。

引用返信 編集キー/
■27248 / inTopicNo.2)  Re[1]: クラス名がライブラリのクラス名とダブってしまう場合
□投稿者/ なちゃ (199回)-(2008/10/31(Fri) 10:11:24)
まあ、さすがにSystemなんて名前はやめとく方がいいでしょう。
現実問題としては、やっぱり少なくとも同時に使用するような名前はかぶらないようにするのが無難です。
名前をつけるときはヘルプで同じ名前がないか程度の確認はしてますね。

globalを強制するオプションはなかったかな〜

引用返信 編集キー/
■27249 / inTopicNo.3)  Re[1]: クラス名がライブラリのクラス名とダブってしまう場合
□投稿者/ よねKEN (206回)-(2008/10/31(Fri) 10:38:01)
タイトルではクラス名とおっしゃっていますが、例示されたコードは名前空間名の話ですね。
要するに命名の話ということでよろしいですか?

名前空間の名前
http://msdn.microsoft.com/ja-jp/library/ms229026.aspx

こちらの解説には、名前空間にしてもクラス名にしても.NET Frameworkで使われている名前
にならないように避けましょう、ということが書かれていますね。

100%確実な回避方法というのはないかもしれませんが、.NET Frameworkで
どんな名前空間があるのか、主要なクラスはどんなものがあるのかを把握しておけば、
ほとんどは回避できると思います。
引用返信 編集キー/
■27251 / inTopicNo.4)  Re[2]: クラス名がライブラリのクラス名とダブってしまう場合
□投稿者/ taguchi (43回)-(2008/10/31(Fri) 11:11:54)
なちゃさん、よねKENさん
アドバイスありがとうございました。

> タイトルではクラス名とおっしゃっていますが、例示されたコードは名前空間名の話ですね。
> 要するに命名の話ということでよろしいですか?

すいませんでした。その通りです。

紹介文献をみても、
「コア名前空間は避けよ」との指示がありますので、
なちゃさん、よねKENさんのおっしゃるように
使ってはいけないと言う事ですね。

大変勉強になりました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -