作者QQ29 (我愛阿蓉)
看板C_Sharp
標題[問題] 請教一個using 的問題
時間Thu Nov 25 17:05:56 2010
遇到一個case
我在wrap一些API 我自己的namespace叫做 MyClass
這API在namespace Foo底下
他這namespace下有個enum 叫做 enum Test{ A, B, C};
但要看到他必須using Foo;
問題是
我包這些API起來
我可能開一個function 類似 Set( Test param);
但使用者要看到Test 他就必須知道要using Foo;
但我覺得這樣不是很友善
所以我duplicate一份enum叫做
enum eTest{A,B,C}
使用者要用我 所以一定要using MyClass; Set改為 Set( eTest param)
但是我這樣duplicate一份總覺得怪怪
所以我想說試試看可不可以間接的讓使用者看到using Foo;
所以我把我code改成
namespace MyClass
{
using Foo;
public class MyClass{
public void Set( Test param){............}
}
}
可是我測了~~~使用者還是認不到 Foo底下的東西
讓我很困擾
我到底是該duplicate一個enum 還是請使用者自行需要知道要寫using Foo;
我試著google了很久....可是找不到@@
還是說做不到呢
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.15.66
1F:推 Deadshot465:小弟我比較好奇的是為什麼不直接加入Foo的參考 11/25 18:48
2F:→ Deadshot465:然後使用完整的名稱Foo.Test呢@@... 11/25 18:49
3F:→ Deadshot465:using只是方便省略冗長的完整名稱而已不是嘛@@? 11/25 18:49
4F:→ remmurds:using到底困擾什麼? 我怎麼都不懂? 11/25 20:15
5F:→ QQ29:我想要內部幫她using後他就直接看的到Test這enum... 11/25 21:00
6F:→ QQ29:他就不用自己using namespace了 11/25 21:00
7F:→ Deadshot465:所以問題是在.....? 11/25 21:14
8F:→ remmurds:那原PO乾脆寫信建議EMCA和ISO修改C#規格算了... 11/25 21:35
9F:→ Deadshot465:原po可以把問題描述得再明確清楚一點嗎? 11/25 21:49
10F:→ QQ29:可能是我對using有點誤解 我是有查msdn 兩種用法 11/25 23:11
11F:→ QQ29:一種是 using(statement...){} 11/25 23:12
12F:→ QQ29:一種是類似C++的typedef....那一般在 cs檔最上面 11/25 23:12
13F:→ QQ29:有一堆using System.xxxx;這是哪一種呢? 11/25 23:13
14F:→ QQ29:我想達到的目的是 我提供dll可是對方不用using 我用到的 11/25 23:13
15F:→ QQ29:namespace 就可以看到 內容了 11/25 23:14
16F:推 Deadshot465:我是覺得原po不要太習慣用C++去理解C#... 11/25 23:20
17F:→ Deadshot465:那樣說不定有時候會反而被制約 11/25 23:21
18F:→ Deadshot465:cs檔最上面的using是指使用名稱空間 11/25 23:21
19F:→ Deadshot465:但那不是必要 那只是方便可以省略完整寫出每個類別 11/25 23:21
20F:→ Deadshot465:冗長的完整名稱 譬如說DataSet這個類別 11/25 23:22
21F:→ Deadshot465:他是位於System.Data名稱空間之下 11/25 23:22
22F:→ Deadshot465:沒using的前提下你必須每次都寫出System.Data.DataSet 11/25 23:23
23F:→ Deadshot465:但using System.Data之後 就可以直接寫DataSet 11/25 23:23
24F:→ Deadshot465:反而比起using 比較重要的是參考的加入 11/25 23:24
25F:→ Deadshot465:有些類別和名稱空間 預設不會被參考 11/25 23:24
26F:→ Deadshot465:你必須手動加入參考才可使用 11/25 23:24
27F:→ Deadshot465:所以你的問題是在你的Set方法需要使用到Foo.Test 11/25 23:26
28F:→ Deadshot465:但是你希望使用者在call你的方法時不用using Foo嗎? 11/25 23:27
29F:→ QQ29:對 不想讓他去using 因為她不知道該using啥 11/26 00:41
31F:→ QQ29:他說有兩種用法 我現在是想第一種用法 using System.Text; 11/26 00:42
32F:→ QQ29:使用者不要知道要using這 他就看的到裡面的東西了 11/26 00:43
33F:→ QQ29:請問做得到嗎 11/26 00:43
34F:→ ssccg:使用者不會不知道該using啥吧,因為需要把Foo.dll加入參考 11/26 02:06
35F:→ ssccg:using是個directive,只對寫了using的那個檔案有效 11/26 02:06
36F:→ ssccg:是告訴compiler對沒指定namespace又不在該namespace中的type 11/26 02:07
37F:→ ssccg:要去哪邊找,而不是inline或是import那種意思 11/26 02:08
38F:→ Deadshot465:如果使用者只參考了你的組件 卻沒參考Foo的話 11/26 02:23
39F:→ Deadshot465:你的方法是起不了作用的 11/26 02:23
40F:→ Deadshot465:因為對使用者來說如果沒參考Namespace Foo的話 11/26 02:24
41F:→ Deadshot465:Foo.Test這個enum是不存在的 自然也無法傳入Set()了 11/26 02:25
42F:→ Deadshot465:不然的話就是將兩者寫在不同的類別檔中 11/26 02:26
43F:→ Deadshot465:但位在同一個命名空間之下 11/26 02:26
44F:→ jrexz:不就是 Test => Foo.Test , using 只是可以省去打Foo 11/26 02:57
45F:→ remmurds:我好奇原PO是不是不知道VisualStudio可以瀏覽一個DLL底下 11/26 06:20
46F:→ remmurds:的所有命名空間和所有類別 11/26 06:21
47F:→ remmurds:把時間花在這 坦白說真的沒啥意義... 11/26 06:24
48F:推 horngsh:建議樓主弄清何謂Namespace以及其真正用途. 11/26 10:23
49F:→ remmurds:同意樓上 11/26 12:32
50F:→ andymai:這就像在路上喊一聲"志明"或"春嬌"~結果有好幾人回頭一樣 11/26 12:43