• ベストアンサー

C# usingの必要性について

C#について質問させてください。 サブディレクトリにあるcsファイルに記述されているクラスを参照する場合、usingディレクティブでサブディレクトリ名を宣言しないとクラス名のみでの宣言はできませんか? ちょっと伝わりにくいかと思うので、具体例を記載します。 プロジェクト直下にmain.csというファイルとSubというディレクトリがあり、Subディレクトリにsub.csというファイルがあるとします。 main.csのmainメソッドの中でSub s = new Sub();のような記述をしたい場合、using Sub;という記載は(名前空間の解決のために)必要ですか? 私は必要と考えているのですが、usingディレクティブがなくても参照できているコードがありましたので、疑問に思い質問させて頂きました。

質問者が選んだベストアンサー

  • ベストアンサー
  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.2

ディレクトリ構造のせいではなく、名前空間が異なるせいです。同じ名前空間のコードからなら参照できます。今回の例ですと、 main.cs の名前空間と、sub.cs の名前空間が異なるのだと思います。 Visual Studio ではサブディレクトリの中にファイルを追加した場合、自動的に、既定の名前空間にサブディレクトリ名を付けた名前空間になるようになっています。 名前空間を揃えてやれば、ディレクトリが違ってもそのまま参照可能です。ただし、そちらの方が良いかどうかは考え方によると思います。私なら using を書くと思います。

ocelot14
質問者

お礼

よく分かりました。 丁寧な説明ありがとうございます。

その他の回答 (1)

  • masaota56
  • ベストアンサー率41% (58/139)
回答No.1

C#では必要ありませんよ。

ocelot14
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • C#でほかのファイルにある自作クラスを使用したい場合

    最近Javaから移ってきたばかりのC#初心者です。 依然作ったことのあるほかのファイルにある自作クラスを 新しいファイルの自作クラスで使用したい場合、どうすれば よいのでしょうか。 Form1.cs(8,7): error CS0246: 型または名前空間名 'Calc1' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 Form1.cs(12,19): error CS0246: 型または名前空間名 'Calc' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 上記のようなエラーが発生してしまいます。 なにとぞご助力をお願いいたします。

  • C#のコマンドラインの分割コンパイルと実行について

    コマンドラインでC#のプログラムをコンパイルと実行する方法 mainが1つでsubが1の場合は以下にある。 http://d.hatena.ne.jp/taka_2/20080124/p6 mainが1つでsubが2つの場合はコマンドはどうするか。 以下に使用したコマンドを示す csc /target:library sub1.cs csc /target:library sub2.cs csc /R:sub1.dll /R:sub2.dll main1.cs とすると error CS0246: 型または名前空間名 'sub1' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 のエラーメッセージが表示される。 わかっている方がおりましたら、教えて下さい。 以下にプログラムを示す。 //---------------------------------------------------------------------------- // mainファイルの内容 using System ; using System.Text; using System.IO; using sub1 ; // subの名前空間を指定(分割コンパイル用) using sub2 ; // subの名前空間を指定(分割コンパイル用) namespace main1 { class Program { static void Main(string[] args) { int a = 10 ; int b = 5 ; sub1.dfsub_cs1 df1 = new sub1.dfsub_cs1() ; // sub1のクラスを確保(分割コンパイル用) sub2.dfsub_cs2 df2 = new sub2.dfsub_cs2() ; // sub2のクラスを確保(分割コンパイル用) Console.Write("add {0,3:D} * {1,3:D} = {2,5:D}\n", a,b, df1.multiply( a, b) ); Console.Write("add {0,3:D} / {1,3:D} = {2,5:D}\n", a,b, df2.divide( a, b) ); return ; } } } //---------------------------------------------------------------------------- // sub1ファイルの内容 namespace sub1 { public class dfsub_cs1 { public int multiply(int a, int b ) { return a * b ; } } } //---------------------------------------------------------------------------- // sub2ファイルの内容 namespace sub2 { public class dfsub_cs2 { public int divide(int a, int b ) { return a / b ; } } }

  • C# using の有効範囲

    プログラムの改良中、 using IWshRuntimeLibrary; をソースの一番上に追加したところ、今まで正常に動いていた部分に以下のエラーが出るようになりました。 「Fileは System.IO.File と IWshRuntimeLibrary.File の間のあいまいな参照です」 追加した名前空間が必要な部分だけに using IWshRuntimeLibrary; が有効になるようにするにはどのように記載すればよいのでしょうか? よろしくお願いします。

  • c#でのプログラムについて

    c#でのプログラムについて お世話になります。 c#初心者です。今までエクセルVBAでの簡単なプログラム経験があります。 コードファイル(CodeFile1.cs)からフォーム(Form1)を表示させるプログラム(初歩) ですでにいきづまっています。 ネットで見つけた、 「Form1 Form = new Form1();  Form.Show();」 と記述しましたら、下にあるエラー一覧で 「型または名前空間名'Form1が見つかりませんでした。usingディレクティブまたはアセンブリ  参照が不足しています。」と出ています。 なので、コードファイル(CodeFile1.cs)の上の方に 「using System.Windows.Form;」 と追加したのですが、まだエラー内容に変わりはありませんでした。 どうすればフォーム(Form1)を表示させるプログラムが出来るか どなたか、お教え頂きたく宜しくお願い致します。

  • C#のビルド方法について質問です。

    IDEをつかわず、コマンドプロンプト上でC#のソースをビルドする時の方法について質問です。 まず以下のようなコードがあるとします。 まずC:\の直下に以下のソースを作成しました。 =================================================== using System; using System.IO; using System.Windows.Forms; namespace Add.TestClass{ public class LibraryClass{ public LibraryClass(){ MessageBox.Show("クラスライブラリコンストラクタの実行"); } } } =================================================== 上記クラスをdllファイルとしてビルドします。 csc /t:library /out:Add.TestClass library.class  と上記のようにビルドしました。するとAdd.TestClass.dllというファイルが確かにできあがりました。 次にこれを実際に実行するためのファイルをつくりました。 それが以下になります。 同じくC:\直下に以下のようなソースを作成します。 =================================================== using System; using System.IO; using System.Windows.Forms; using Add.TestClass; public class MainClass{ public static void Main(String [] args){ LibraryClass obj = new LibraryClass(); } } =================================================== このファイルをビルドします。 csc /r:Add.TestClass.dll main.cs としてビルドし、その後 mainというファイルを実行しました。 するとキチンとMessageBoxで MessageBox.Show("クラスライブラリコンストラクタの実行");が実行されました。 ここまでは問題ないのですが、この場合 main.exeファイルとAdd.TestClass.dllというファイルが 同じ階層に存在するような状態になっているのですが、これを main.exeファイルのある階層にdllというディレクトリを作成し そのdllの中にAdd.TestClass.dllというファイルをおいた階層状況でmain.exeファイルを実行したいのです。 そのためにまず、 csc /r:”C:\dll\Add.TestClass.dll" main.cs 上記のようなビルドオプションでビルドしてみたのですが、ビルドはとおりましたが -------------------------------------------------------------------------------------------------------------------- ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン ブリ 'Add.TestClass, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'、ま たはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりませ ん。 場所 MainClass.Main(String[] args) -------------------------------------------------------------------------------------------------------------------- というエラーがでました。 このdllファイルを特定の任意のディレクトリ内において、main.exeを実行してうまく動くようにするためには どのようなビルドオプションをつけたらいいのでしょうか? よろしくご教授お願いいたしま。

  • C#のargs[0].Successの記述

    if (System.Text.RegularExpressions. Regex.Match(line, args[0].Success)) の記述で, エラー 1 'string' に 'Success' の定義が含まれておらず、型 'string' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 といったコンパイルエラーが出るようなのですが、usingディレクティブで追加しないといけない記述とかあるのでしょうか? よろしくお願い致します。

  • c#プログラムについて

    c#プログラムについて お世話になります。 今までエクセルVBAのプログラム経験は少々ありますが、c#プログラムは初めてです。 分からない事だらけの状況なのですが。 Windowsフォームをいくつか作成しており、 また別でコードファイル(CordFile1.cs)を追加して、そこにエントリポイントである static void Main()を記述して展開させていこうと考えました。 そしてデバックしてみたら、エラー一覧で「~複数のエントリポイントが定義されています~」 と表示され、その時気が付いたのですがいつのまにかProgram.csが出来ており、その中に自然に、 static void Main()が記述されていました。 質問 1)Progarm.csやエントリポイントは自然に出来るものなのでしょうか。   (気付かない間に作成される様な事をしてしまっていたのでしょうか。) 2)また、気付かない内に出来ていたとはいえ、Program.csに自然にエントリポイントが   あるのであれば、そこにCordFile1.csで記述していたMain()の内容を移しましたら、   今度は新たなエラーが出る様になってしまいました。   「無効なトークン'('や('=='など)がクラス、構造体またはインターフェースのメンバ   宣言で使用されています。   Program.cs内に記述していく事は間違いなのでしょうか。 どなたかお教え頂きたく、宜しくお願い申し上げます。  

  • ASPX(C#)で別ファイルで自分で作成したクラスをインスタンスかする

    ASPX(C#)で別ファイルで自分で作成したクラスをインスタンスかするには? IIS6.0 + .netframework2.0です。 Windowsアプリを作成しその認証用に上記環境でライセンス認証だけをするプログラムを作りたいのですが・・・ Windowsアプリの方でまとめたライブラリをコピーしてそのまま使いたいのですが単純に配置しただけでは呼び出しができません。 たとえば以下のような状況です。 check.aspx ユーザーがアクセスするページ check.aspx.cs このファイル内でインスタンス化して使用したい lib/utils.cs インスタンスかしたいクラスが記述 check.aspx.cs内で using~で記述してもエラーになりますし その参照をどこかに書く必要があるのだろうな?とはわかるのですが .netでWEBアプリをいじるのは初めてなのでどこをどういじっていいのかわかりません。 よろしくお願いします。

  • C言語 extern について

    どうもこんにちは C言語でプログラムを作っています。 複数のファイルから1つのプログラムを作っていますが、あるファイルで実装した関数を別のファイルから使用する際、単にプロトタイプ宣言を行うだけでなく、extern が必要なのでしょうか? 今までは extern を使用せず、以下のように書いてました。 // main.c ファイル int func_sub(); int func_main() { return func_sub() * 2; } // sub.c ファイル int func_sub() { return 10; } これは extern を使用して、このように書かないとだめなのでしょうか? // main.c ファイル extern int func_sub(); // このexternは必要? int func_main() { return func_sub() * 2; } // sub.c ファイル int func_sub() { return 10; } 大域変数を他のファイルでも使用する場合はexternが必要ですが、関数に関してもexternを使用しなければならないのでしょうか?

  • [C#]Public変数の使い方

    今までVBを使っており、C#は初心者です。 VBでは、各関数にまたがって使う変数は、 private Hensu as integer Sub Kansuu1() Hensu = 2 Call Kansuu2() End Sub Sub Kansuu2() MsgBox Hensu End Sub と宣言すれば、使えますが、C#でそのような使い方はできないのでしょうか? 変数Hensu3をMainとMain2双方で使いたいとき、 using System; namespace ns1 { static class Program { public string Hensu3; static void Main(string[] args) { ・・・ } static void Main2() { ・・・ } } } と書きましたが、ビルドエラーになります。

専門家に質問してみよう