teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤記訂正

2016/12/11 05:39

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -13,9 +13,9 @@
13
13
  対処方法については
14
14
 
15
15
  1. 自動生成されたApplicationというクラス名を全てフルネームに置き換える
16
- とりあえずは問題解消できますが「自動生成されたソースをこの理由で書き換える」のは筋がよくないと感じます。
16
+ とりあえずは問題解消できますが「自動生成されたソースをこの理由で書き換える」のは個人的には筋がよくないと感じます。
17
17
 
18
- 2. 同じ名前のクラスが含まれるimportをしない(1)
18
+ 2. 同じ名前のクラスが含まれるimportをしない
19
19
  `using Microsoft.Office.Interop.Excel;`を削除し、そのnamespace下の全クラスはフルネームで記載する方法です。名前が長ったらしくなるのでソースがみずらくなりますがそういったクラス数が少なければ許容できることもあるかも知れません。
20
20
 
21
21
  3. 同じ名前のクラスが含まれるimportがあるならモジュール(ソース)を分離する

1

説明の間違いを訂正

2016/12/11 05:39

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  ...
7
7
  ClassA a;
8
8
  ```
9
- などと書いた場合、コンパイラーはクラス名`ClassA`が同一のnamespaceに書いてなければusingで指定されたいずれかのnamespaceの中から探してくれます。ところがa.b.ClassAとc.d.ClassAの両方がpublicなクラスとして存在しているとClassAという指定だけではどちらのクラスを参照しているのかをコンパイラーが決定できません。エラーはそういうことをいっています。「ambigous」というのは「あいまい」という意味です。
9
+ などと書いた場合、コンパイラーはクラス名`ClassA`が同一のnamespaceに書いてなければusingで指定されたいずれかのnamespaceの中から探してくれます。ところがa.b.ClassAとc.d.ClassAの両方がpublicなクラスとして存在しているとClassAという指定だけではどちらのクラスを参照しているのかをコンパイラーが決定できません。エラーはそういうことをいっています。「あいまい」というのはそういう意味です。
10
10
 
11
11
  ご質問のコードにあるApplicationはフォームアプリケーションを作成した際にVisual Stuidioが自動生成したものですが、実際にはSystem.Windows.Forms.Applicationを意味します。自動生成コードでフルネームになっていないのは「Applicationというクラス名が存在しているようなnamespaceをユーザーがimportするようなことはレアケースだろうし、一々フルネームで生成するのは見ずらいから」という理由だと思います。
12
12