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

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

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

Re[6]: C#の規定の名前空間


(過去ログ 58 を表示中)

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

■32837 / inTopicNo.1)  C#の規定の名前空間
  
□投稿者/ らぐんす (10回)-(2009/02/16(Mon) 15:07:34)

分類:[.NET 全般] 

VBのものをC#に書き直す作業をしているのですが、namespace{...}を付けるとインデントが深すぎるので、書いてないのですが、
プロパティの規定の名前空間の記述があれば、問題ないのでしょうか?
それともnamespace{...}は必ず記述しなければ駄目ですか?







引用返信 編集キー/
■32840 / inTopicNo.2)  Re[1]: C#の規定の名前空間
□投稿者/ らぐんす (11回)-(2009/02/16(Mon) 16:04:29)
度々すみません。規定の名前空間ってVBしか効いてないでしょうか?
参照追加でusing出来ませんでした。
インデントは深すぎますが、付けるしかないのですか。
でもaspxとかには付いてないじゃないですか?
引用返信 編集キー/
■32841 / inTopicNo.3)  Re[1]: C#の規定の名前空間
□投稿者/ カドルドエグ (72回)-(2009/02/16(Mon) 16:13:11)
No32837 (らぐんす さん) に返信
> VBのものをC#に書き直す作業をしているのですが、namespace{...}を付けるとインデントが深すぎるので、書いてないのですが、
> プロパティの規定の名前空間の記述があれば、問題ないのでしょうか?
> それともnamespace{...}は必ず記述しなければ駄目ですか?

「規定の名前空間」というのがどういうものなのかいまいちイメージがわかないので
わかる範囲内のみで…


ここの記事
http://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_010/csharp_abc01.html
に詳しく載っていますが、C#では名前の衝突を避けるために、
『各クラスは「名前空間に属している」』という概念があります。
それは自作でも既存でも関係ありません。

なので、特に自作クラスの場合、その名前空間を「書いてない」となると、
らぐんすさんが開発に使用している・作っている
クラスは一体どこに属しているの???となります。
かなり簡単な表現で書くなら、「どこのフォルダに入っているファイルなの?」ということでしょうか。
既存クラスでも名前空間は明記しなくてはなりません。


>インデントが深すぎる
とありますが、確かに、コードを書く上でインデントは浅い方がよいです。
ただ、それは「必ず必要なインデント = 名前空間とクラスの分」を考慮した上での話しです。

また、「どうして.aspxファイルにはnamespaceがないのか」についてはこちらが参考になるかもしれません。
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-42036.htm
引用返信 編集キー/
■32842 / inTopicNo.4)  Re[1]: C#の規定の名前空間
□投稿者/ みきぬ (382回)-(2009/02/16(Mon) 16:37:12)
No32837 (らぐんす さん) に返信
> VBのものをC#に書き直す作業をしているのですが、namespace{...}を付けるとインデントが深すぎるので、書いてないのですが、
> プロパティの規定の名前空間の記述があれば、問題ないのでしょうか?
> それともnamespace{...}は必ず記述しなければ駄目ですか?
>
C# の場合は、namespace { ... } の記述は必須ですので、必ず書いてください。

「規定の名前空間」の設定は、VB.NET と C# では意味が異なります。
VB.NET の場合は、Namespace 〜 End Namespace を書かなくてもその名前空間になります。
# ちなみに、Namespace 〜 End Namespace を書いた場合は、規定の名前空間のさらに下の階層になります。

C# では規定の名前空間が何に使われるのかというと、
新しいクラスをプロジェクトに追加したり、型つき DataSet などを作ってコードを自動生成したときに
規定の名前空間を使って、namespace { ... } のコードを用意してくれます。
(結果、規定の名前空間で指定した階層のクラスになります)
引用返信 編集キー/
■32870 / inTopicNo.5)  Re[2]: C#の規定の名前空間
□投稿者/ らぐんす (12回)-(2009/02/17(Tue) 10:06:09)
カドルドエグ様、みきぬ様、ご返答ありがとうございます。

C#の場合ループの中にif文なんかあったりすると、書き始めが中央付近になるのでXGA画面だと見た目のバランス悪いです。VBとはインデント一個分変わりませんが、その差は結構でかいんです。

1個のファイル上でnamespace A{...} namespace B{...}と記述する人の方が少ないのではないでしょうか?何か意味あんのかな?
引用返信 編集キー/
■32871 / inTopicNo.6)  Re[3]: C#の規定の名前空間
□投稿者/ επιστημη (1729回)-(2009/02/17(Tue) 10:19:13)
επιστημη さんの Web サイト
> 1個のファイル上でnamespace A{...} namespace B{...}と記述する人の方が少ないのではないでしょうか?

...それで?

引用返信 編集キー/
■32879 / inTopicNo.7)  Re[3]: C#の規定の名前空間
□投稿者/ よねKEN (266回)-(2009/02/17(Tue) 10:31:16)
2009/02/17(Tue) 11:04:07 編集(投稿者)

私の感覚ではこうです、という単なる一意見です。

No32870 (らぐんす さん) に返信
> C#の場合ループの中にif文なんかあったりすると、書き始めが中央付近になるのでXGA画面だと見た目のバランス悪いです。VBとはインデント一個分変わりませんが、その差は結構でかいんです。

私の場合、C#はちょっとしかやってなくて、VB暦の方が圧倒的に長いのですが、
C#のnamespaceによる1個分のインデントはまったく気になりません。
普段使っている画面は同じく1024x768(XGA)です。

ループの中にif文がある場合でも、namespace、class、メソッド、ループ、ifの5インデントになると思いますので、
スペースで20個分くらいでしょうか。私のところでは、コードエディタの1/6くらいの位置になっています。

書き始めが中央付近というと、ひょっとしてフォントがかなり大きめなんでしょうか。
#私のはデフォルトのまんまです。

> 1個のファイル上でnamespace A{...} namespace B{...}と記述する人の方が少ないのではないでしょうか?何か意味あんのかな?

1個のファイル上で複数の名前空間を扱うことは私はないですが、
同じプロジェクトの別のファイルや同じソリューションの別プロジェクトでは
異なる名前空間を定義することはあります。

引用返信 編集キー/
■32900 / inTopicNo.8)  Re[3]: C#の規定の名前空間
□投稿者/ みきぬ (387回)-(2009/02/17(Tue) 14:11:02)
No32870 (らぐんす さん) に返信
> C#の場合ループの中にif文なんかあったりすると、書き始めが中央付近になるのでXGA画面だと見た目のバランス悪いです。VBとはインデント一個分変わりませんが、その差は結構でかいんです。
>
[壁]・x・) 常にインデント1つぶん、右にスクロールさせとくのはだめぽ?
引用返信 編集キー/
■32905 / inTopicNo.9)  Re[3]: C#の規定の名前空間
□投稿者/ まさる (79回)-(2009/02/17(Tue) 15:29:02)
まさる さんの Web サイト
No32870 (らぐんす さん) に返信
> C#の場合ループの中にif文なんかあったりすると、書き始めが中央付近になるのでXGA画面だと見た目のバランス悪いです。VBとはインデント一個分変わりませんが、その差は結構でかいんです。

オプションでタブの幅を2文字にするとか。
引用返信 編集キー/
■32908 / inTopicNo.10)  Re[4]: C#の規定の名前空間
□投稿者/ 囚人 (321回)-(2009/02/17(Tue) 15:40:12)
何かに使われる事のない、単なる一アプリケーションなら名前空間なんて必要ないんじゃないかな。僕は省略ありだと思いますし、現にそうしたりします。
この例だと、名前空間を長く細かく切ると鬱陶しいだけでメリットないし。
引用返信 編集キー/
■32909 / inTopicNo.11)  Re[2]: C#の規定の名前空間
□投稿者/ よねKEN (268回)-(2009/02/17(Tue) 15:51:27)
2009/02/17(Tue) 15:52:17 編集(投稿者)

No32842 (みきぬ さん) に返信
> C# の場合は、namespace { ... } の記述は必須ですので、必ず書いてください。

必須ではないですよ。
手作業で削ってビルドすればOKです。
#Visual Studioの動作上、手作業で削った場合にどこかの機能で
#レアなバグを踏むとかならありえないとも言えない・・・
引用返信 編集キー/
■32912 / inTopicNo.12)  Re[3]: C#の規定の名前空間
□投稿者/ みきぬ (388回)-(2009/02/17(Tue) 16:07:34)
No32909 (よねKEN さん) に返信
> ■No32842 (みきぬ さん) に返信
>>C# の場合は、namespace { ... } の記述は必須ですので、必ず書いてください。
>
> 必須ではないですよ。
> 手作業で削ってビルドすればOKです。

あれれ? ほんとだ。
そうした場合は、ルート名前空間(と言えばいいのかしら)のクラスになるみたいですね。

引用返信 編集キー/
■32914 / inTopicNo.13)  Re[4]: C#の規定の名前空間
□投稿者/ よねKEN (269回)-(2009/02/17(Tue) 16:16:47)
> >>C# の場合は、namespace { ... } の記述は必須ですので、必ず書いてください。
>>
>>必須ではないですよ。
>>手作業で削ってビルドすればOKです。
> 
> あれれ? ほんとだ。
> そうした場合は、ルート名前空間(と言えばいいのかしら)のクラスになるみたいですね。

CILの場合
namescape X
{
   namespace Y
   {
      class Z
      {
      }
   }
}
と書くのも、
class X.Y.Z
{
}
と書くのも同じで、X.Y.Zというクラスになります。
CLRの観点では名前空間というのは無くて、単にクラス名の一部ですから。

引用返信 編集キー/
■32950 / inTopicNo.14)  Re[4]: C#の規定の名前空間
□投稿者/ 渋木宏明(ひどり) (1080回)-(2009/02/18(Wed) 09:25:15)
渋木宏明(ひどり) さんの Web サイト
> そうした場合は、ルート名前空間(と言えばいいのかしら)のクラスになるみたいですね。

グローバルだったと思ふ。

名前空間が相対的なものでないことを表すために

global::Hoge.HogeHoge.HogeHoge

なんて書くことがあるし。

引用返信 編集キー/
■32954 / inTopicNo.15)  Re[5]: C#の規定の名前空間
□投稿者/ biac (54回)-(2009/02/18(Wed) 10:12:52)
biac さんの Web サイト
>>そうした場合は、ルート名前空間(と言えばいいのかしら)のクラスになるみたいですね。
>
> グローバルだったと思ふ。

ILDASM でメタインフォを見ると、 TypDefName のとこはクラス名だけで、 globa.クラス名 とはなってなかったです。 ぅ〜ん、 どうなんだろう…?
引用返信 編集キー/
■32980 / inTopicNo.16)  Re[6]: C#の規定の名前空間
□投稿者/ よねKEN (270回)-(2009/02/18(Wed) 13:03:03)
2009/02/18(Wed) 13:20:34 編集(投稿者)

No32954 (biac さん) に返信
> ILDASM でメタインフォを見ると、 TypDefName のとこはクラス名だけで、 globa.クラス名 とはなってなかったです。 ぅ〜ん、 どうなんだろう…?

C#のglobalキーワードは、名前空間の一部の名称とクラス名がたまたま一致しているような場合に、
そのクラスのせいでアクセスできなくなる名前空間が発生するのを回避するために便宜上用意されているキーワードで、
global.クラス名というクラス名が存在するわけではありません。

IL上にはNamespaceに関するメタデータは持っていません。名前空間は単にクラス名の共通のプリフィックスです。
System.Windows.Forms.FormにおけるSystem.Windows.Formsの部分を各言語が名前空間とみなすようになっています。

<追記>
上記の説明だけだとこれまでの流れ(■ No32912 からの流れ)を否定しているように見えるので、補足します。

C#の世界(つまり、C#の言語仕様上)では名前空間なしの状態を”グローバル名前空間に存在する”と説明していますので、
namespace指定なしの場合は、グローバル名前空間に所属している、という説明であっています。
</追記>

引用返信 編集キー/
■32982 / inTopicNo.17)  Re[6]: C#の規定の名前空間
□投稿者/ 渋木宏明(ひどり) (1082回)-(2009/02/18(Wed) 13:28:41)
渋木宏明(ひどり) さんの Web サイト
> ILDASM でメタインフォを見ると、 TypDefName のとこはクラス名だけで、 globa.クラス名 とはなってなかったです。 ぅ〜ん、 どうなんだろう…?

global.Hoge じゃなくて global::Hoge です。

よねKENさんも書いてるけど、global という特別扱いの名前空間があるわけじゃないちゅ。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -