質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Namespace

各要素の名前の重複による衝突が起こらないよう、一意の名前をつけなければならない範囲のことであり、また、プログラミングにおける識別名を付加する機能のをNamespace(名前空間)と呼ぶ。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

15088閲覧

C#の名前空間とフォルダ階層が一致しないことのメリット

teraotailnosuke

総合スコア52

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Namespace

各要素の名前の重複による衝突が起こらないよう、一意の名前をつけなければならない範囲のことであり、また、プログラミングにおける識別名を付加する機能のをNamespace(名前空間)と呼ぶ。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2016/11/23 13:21

うろ覚えですが、確かJavaだとjp.co.aaa.bbb.Hogeというクラスがあったら、jp\co\aaa\bbb\Hoge.javaというフォルダ階層にしなければいけなかったと記憶しています。
この仕様はパッケージを見ただけでどこにソースがあるのかわかりやすいというメリットがあると思います。

C#の場合、名前空間とフォルダ構成の関連に制限は無かったと思います。
この仕様のメリットは何でしょうか?
自分は

  • Config, Resource, Sourceなどでフォルダ分けして整理しても名前空間の方にSourceと付けなくて済む
  • あるプロジェクトからソースファイルをいくつか持ってきて自分のテスト用プロジェクト(動作確認用)を動かす場合、tmpなどのフォルダを作って全部そこに放り込んでおけば済む(自分で作ったソースと分けておき、かつ名前空間のフォルダ階層をいちいち作らずに済む)

というのを思いつきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/23 22:42

javaの場合、オートロードが規約で定まっているので、マニュピレートロードができません。また パッケージとネームスペースは別物です。
guest

回答3

0

ベストアンサー

JAVAの一致させなきゃいけないことのメリットとして挙げている内容ですが、
ディレクトリ階層をたどって開いてようやく中身を見るので全くメリットに感じないんですが
からディレクトリを何回も開いてようやく探し出してソースを見てどこにあるのかわかりやすいって言われても、ねぇ

ちなみにC#の方はほかのプロジェクトで使用しているクラスを一つだけ他で再利用したいときにはHDDの中の置き場所が固定されないのがメリットになります(まぁJAVA使いじゃないのでそれが当たり前の認識なんですが)
色んな機能をまとめたものをまるっと使う場合はプロジェクトを参照すればいいのだけど、
ちょこっとした1ファイルだけのためにプロジェクトを分けてってのは大げさな気がして
C#ってかVSだとファイルの追加で既存項目の追加にしてそのまま追加ボタンを押さずに追加ボタンの右横の参画を押して参照か何かに切り替えるとファイルはコピーせずに同じものを見る形になるので修正漏れが起きなくなるので便利です
あんまりいい使い方ではないってのは理解してますけどね

投稿2016/11/24 15:12

len_souko

総合スコア1348

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

1つのファイルに複数の名前空間を定義できることはメリットと思います。
プライベートな名前空間をC#で定義できるかどうか把握していませんが、もし定義できるなら、外部I/Fを担うパブリックな名前空間と同じファイルに、実装をプライベートとして入れたいことはあると思います。

プライベート名前空間が無かった場合でも、internalのような名前にして「internalの中のものは使うな」というプログラミング規約にした時、同様です。(C++ではこのようにしてます。)

投稿2016/11/23 17:22

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C# がフォルダ階層と名前空間の一致という「制約」を採用しなかったのは、それが優れているから、というより、それが好きな人がいるから、ということではないでしょうか。

C#は、VBやらC++やらJavaやらDelphiやら、いろんな言語のいいとこどりした言語です。
どの言語の使い手から見ても、「これ〇〇(自分が慣れ親しんだ言語)に似てる!」と思わせる、超絶八方美人な仕様となっています。

例えば名前空間を使う必要がないC++にはそんな制約ないし、もちろん名前空間という概念がないVB(.net以前)にもそんな制約はありません。
そんな言語で経験を積んだ人たちに新たな制約を課してもいいことないって判断じゃないでしょうか。
一致させた方が管理しやすいならそうしてくれ、それが嫌ならしなくてもいいよと。

多くのプログラミング言語は「プログラムはこう書くべき」という設計者の技術的思想を反映した仕様となっているのでしょうが、C#は「みんなに使ってほしい(そしてWindowsプログラムを書いてほしい)」というかなり異なったアプローチで作られているように思います。

投稿2024/01/27 07:16

shu-tec

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問