• ベストアンサー

C# using の有効範囲

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

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.5

対策として思いつくのはusingエイリアスを使って、名前空間名を短縮する方法でしょうか。 using IW=IWshRuntimeLibrary; とすると、IWshRuntimeLibrary.FileにIW.Fileでアクセスできます。

usatan2
質問者

お礼

回答ありがとうございます。 少しは見やすくなりました。ありがとうございます。 ちなみに、 using IW=IWshRuntimeLibrary; を使用するメソッドの中に記載したら エラー 1 構文エラーです。'(' が必要です。 で怒られました。 先頭にいれるのですね。勉強になりました。

その他の回答 (4)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

それぞれ使うメソッドが別なら、partial classを使ってファイル自体を分けてしまえば行けそうな気がします。 まぁスマートとは言い難いですが……

usatan2
質問者

お礼

回答ありがとうございます。 ファイルを分けるというのも一案ですね。 参考にさせていただきます。

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.3

usingの影響は直下の名前空間だと思いますので、その部分だけ名前空間を分けて書く、ぐらいしか思いつきませんがいかんせんスマートではありませんね。 私では力不足のようですので、他の方に回答をお任せします。

usatan2
質問者

お礼

名前空間を分けるアイデア、ありがとうございます。 参考にさせていただきます。

  • tt515jp
  • ベストアンサー率50% (1/2)
回答No.2

System.IO.File と IWshRuntimeLibrary.File のどちらが多く使用されているかによりますが、 IWshRuntimeLibrary.File の方が少ないのであれば、 using IWshRuntimeLibrary; の行を削除し、 IWshRuntimeLibrary.File を使用している箇所の File を、 IWshRuntimeLibrary.File にしてください。

usatan2
質問者

お礼

回答ありがとうございます。 お教えくださった対処法、実は実施中です。 今回の質問は、 using IWshRuntimeLibrary; が及ぼす範囲を制限するような記述方法 についてです。 よろしくお願いいたします。

  • ONEONE
  • ベストアンサー率48% (279/575)
回答No.1

C#初めて間もない素人ですが回答させて頂きます。 そういう場合は、Fileがどちらに属しているかSystem.IO.File か IWshRuntimeLibrary.File と明確に記述し分ければよいと思います。

usatan2
質問者

お礼

回答ありがとうございます。 実は、IWshRuntimeLibraryを使う部分は、7行ほどだけなので、 先頭のusing IWshRuntimeLibrary;をコメントアウトして、 その7行ほどの部分を IWshRuntimeLibrary.IWshShortcut_Class shortcut; shortcut = (IWshRuntimeLibrary.IWshShortcut_Class)TheShell.CreateShortcut( filename ); のように、毎回「IWshRuntimeLibrary」を追加して対処して動いています。 ちなみに、IWshRuntimeLibrary.File は一箇所も使っていません。 もっとスマートな美しい解決策が無いのかなと思い、質問しました。 よろしくお願いいたします。

関連するQ&A

  • C# usingの必要性について

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

  • Using System.Drawing がうまく使えなくて困っていま

    Using System.Drawing がうまく使えなくて困っています. C# に取り組んでいる初心者です.先日も、この欄でご教示を戴きました.有難うございました. 再度恐縮ですが、お願いをいたします. 簡単な Y = f(X) のグラフを描かせたいと考えています. ところが、肝心な DrawLine の命令が使えません. この命令は、System.Drawing と言う NameSpace に属していると思います. ところが、using System.Drawing とすると、Drawing に朱色で下線が付きます. なぜ受けつけないのか、さっぱりわかりません. そこで、下記のように、プログラムの頭に、いろんな NameSpace を書いてみました using System; using System.Math; using System.Console; using System.IO; using System.Text; using System.Collections; using System.Drawing; using System.Windows.Forms; 結果は、最後の二つの、 Drawing と Windows に朱下線が付きます. エラーメッセージはつぎのとおりです. 「エラー1 型または名前空間名 'Drawing' は名前空間 'System' に存在しません。アセンブリ参照が不足しています」 いったい、どう言うことでしょう? お手数をかけて申し訳ありませんが、 どうぞ、よろしくご教示をお願いします. グラフに使用するX,Yの座標値の計算は、問題なく終わっています. テーマは、電子回路の回路網の解析です. すべて数値計算になりますので、ニュートン近似か、2分法で最適値を求めています 使用している環境は、次のとおりです. NEC ValueOne CPU Athlon 64x2 4200+ Memory 1GB OS XP SP3 Visual C# 2010 Express

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

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

  • C#でSystem.IO.FileFormatEx

    VB2010で System.IO.FileFormatException をThrowしているコードがあります。 これをC#2010にコンバートしたのですが 上記箇所に於いて 型または名前空間名 'FileFormatException' は名前空間 'System.IO' に存在しません。アセンブリ参照が不足しています。 というエラーが出てしまいます。 何を参照設定すればよいのでしょうか。 またはこのような処理は不可なのでしょうか。

  • Visual C#で、usingが出来ないクラスがある?

    最近、Visual C# 2005 Express EditionでC#の勉強を始めた者です。 いくつかテストプログラムを実行しようと思ったのですが、JavaのEclipse等と操作感覚の違いに戸惑っています。 質問なのは、usingできるクラスについてです。 新しいプロジェクトを作成する時、「Windowsアプリケーション」を選択すると、次のusingが使えます。 > using System.Windows.Forms; しかし「コンソールアプリケーション」を選択した場合、上記のusingは使用できないのです。 ただ、プロジェクトの「参照設定」で.Netタブの「System.Windows.Forms」を追加すれば、一応使えるようになります。 考えてみたのですが、もしかしてプロジェクトを作成する時に選択する「Windowsアプリケーション」や「コンソールアプリケーション」は、参照設定に追加する内容が違うという事なのでしょうか? 一応使う事が出来るので、今の所は問題ではないのですが、付属のマニュアルを読んでも詳細が解りにくく困っています。 私の認識は間違っているのでしょうか?

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

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

  • C#初心者が変数の型について質問です

    使用ソフトは Microsoft Visual C#です protected Scene scene; と入力すると Scene のところで「usingディレクティブまたは名前空間が不足しています」とエラーが出ます。 多分usingって書いてあるところに名前空間?を追加すればいいと思うのですが、何を追加すればいいのかわかりません 自分でもだいぶ調べたのですが分かりませんでした どなたか教えて下さいm(__)m

  • マシンによって動いたり動かなかったり原因不明で・・

    「UnauthorizedAccessExceptionは、ハンドルされませんでした。」となってしまい解決手段がわかりません。 このエラーメッセージはアクセス権に問題がある場合出るようですが・・・ エラーとなるソースは以下の通りです。 Byte[] data = Properties.Resources.ZIPFILEDAYO; using (System.IO.Stream srm = System.IO.File.Open(@"D:\\Program Files(x86)\\ZIPFILEDAYO.zip", System.IO.FileMode.Create) ) { using ( System.IO.BinaryWriter bw = new System.IO.BinaryWriter(srm) ) { bw.Write(data); } } 何がいけないのでしょうか・・・

  • 使用しているusing名前空間を取得する方法

    visual studio C# 2005 express .net framework 2.0を試用しています。 例えば次のような ------------------------------------ using System; using System.Collections.Generic; using MySystem.MyCollections; namespace Test { public class Tester { public Tester() { } } } ------------------------------------ 「System」 「System.Collections.Generic」 「MySystem.MyCollections」 という3つの名前空間を使っていますが、 この一覧をプログラム側で動的に取得する方法はあるのでしょうか? または使用しているdll一覧でもよいのですが、 型の探索を行いたいと思いました。

  • C#でコンパイルできない

    Visual C# 2008 EXPRESS EDITONでコンソールアプリケーションを作成しています。 プログラム上の以下の行をコンパイルできません。 System.Windows.Forms.Clipboard.SetText(string); エラーメッセージは以下のとおりです。 型または名前空間名 'Windows' は名前空間 'System' に存在しません。アセンブリ参照が不足しています。 なお、フォームアプリケーションの作成においては、上記のエラーは発生しませんでした。参照ライブラリを加える必要があるのでしょうか?

専門家に質問してみよう