[問題] 請教一個using 的問題

看板C_Sharp (C#)作者 (我愛阿蓉)時間14年前 (2010/11/25 17:05), 編輯推噓3(3047)
留言50則, 7人參與, 最新討論串1/2 (看更多)
遇到一個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

11/25 18:48, , 1F
小弟我比較好奇的是為什麼不直接加入Foo的參考
11/25 18:48, 1F

11/25 18:49, , 2F
然後使用完整的名稱Foo.Test呢@@...
11/25 18:49, 2F

11/25 18:49, , 3F
using只是方便省略冗長的完整名稱而已不是嘛@@?
11/25 18:49, 3F

11/25 20:15, , 4F
using到底困擾什麼? 我怎麼都不懂?
11/25 20:15, 4F

11/25 21:00, , 5F
我想要內部幫她using後他就直接看的到Test這enum...
11/25 21:00, 5F

11/25 21:00, , 6F
他就不用自己using namespace了
11/25 21:00, 6F

11/25 21:14, , 7F
所以問題是在.....?
11/25 21:14, 7F

11/25 21:35, , 8F
那原PO乾脆寫信建議EMCA和ISO修改C#規格算了...
11/25 21:35, 8F

11/25 21:49, , 9F
原po可以把問題描述得再明確清楚一點嗎?
11/25 21:49, 9F

11/25 23:11, , 10F
可能是我對using有點誤解 我是有查msdn 兩種用法
11/25 23:11, 10F

11/25 23:12, , 11F
一種是 using(statement...){}
11/25 23:12, 11F

11/25 23:12, , 12F
一種是類似C++的typedef....那一般在 cs檔最上面
11/25 23:12, 12F

11/25 23:13, , 13F
有一堆using System.xxxx;這是哪一種呢?
11/25 23:13, 13F

11/25 23:13, , 14F
我想達到的目的是 我提供dll可是對方不用using 我用到的
11/25 23:13, 14F

11/25 23:14, , 15F
namespace 就可以看到 內容了
11/25 23:14, 15F

11/25 23:20, , 16F
我是覺得原po不要太習慣用C++去理解C#...
11/25 23:20, 16F

11/25 23:21, , 17F
那樣說不定有時候會反而被制約
11/25 23:21, 17F

11/25 23:21, , 18F
cs檔最上面的using是指使用名稱空間
11/25 23:21, 18F

11/25 23:21, , 19F
但那不是必要 那只是方便可以省略完整寫出每個類別
11/25 23:21, 19F

11/25 23:22, , 20F
冗長的完整名稱 譬如說DataSet這個類別
11/25 23:22, 20F

11/25 23:22, , 21F
他是位於System.Data名稱空間之下
11/25 23:22, 21F

11/25 23:23, , 22F
沒using的前提下你必須每次都寫出System.Data.DataSet
11/25 23:23, 22F

11/25 23:23, , 23F
但using System.Data之後 就可以直接寫DataSet
11/25 23:23, 23F

11/25 23:24, , 24F
反而比起using 比較重要的是參考的加入
11/25 23:24, 24F

11/25 23:24, , 25F
有些類別和名稱空間 預設不會被參考
11/25 23:24, 25F

11/25 23:24, , 26F
你必須手動加入參考才可使用
11/25 23:24, 26F

11/25 23:26, , 27F
所以你的問題是在你的Set方法需要使用到Foo.Test
11/25 23:26, 27F

11/25 23:27, , 28F
但是你希望使用者在call你的方法時不用using Foo嗎?
11/25 23:27, 28F

11/26 00:41, , 29F
對 不想讓他去using 因為她不知道該using啥
11/26 00:41, 29F

11/26 00:42, , 30F
http://tinyurl.com/2aolfgb 請問第一個using 指示詞。
11/26 00:42, 30F

11/26 00:42, , 31F
他說有兩種用法 我現在是想第一種用法 using System.Text;
11/26 00:42, 31F

11/26 00:43, , 32F
使用者不要知道要using這 他就看的到裡面的東西了
11/26 00:43, 32F

11/26 00:43, , 33F
請問做得到嗎
11/26 00:43, 33F

11/26 02:06, , 34F
使用者不會不知道該using啥吧,因為需要把Foo.dll加入參考
11/26 02:06, 34F

11/26 02:06, , 35F
using是個directive,只對寫了using的那個檔案有效
11/26 02:06, 35F

11/26 02:07, , 36F
是告訴compiler對沒指定namespace又不在該namespace中的type
11/26 02:07, 36F

11/26 02:08, , 37F
要去哪邊找,而不是inline或是import那種意思
11/26 02:08, 37F

11/26 02:23, , 38F
如果使用者只參考了你的組件 卻沒參考Foo的話
11/26 02:23, 38F

11/26 02:23, , 39F
你的方法是起不了作用的
11/26 02:23, 39F

11/26 02:24, , 40F
因為對使用者來說如果沒參考Namespace Foo的話
11/26 02:24, 40F

11/26 02:25, , 41F
Foo.Test這個enum是不存在的 自然也無法傳入Set()了
11/26 02:25, 41F

11/26 02:26, , 42F
不然的話就是將兩者寫在不同的類別檔中
11/26 02:26, 42F

11/26 02:26, , 43F
但位在同一個命名空間之下
11/26 02:26, 43F

11/26 02:57, , 44F
不就是 Test => Foo.Test , using 只是可以省去打Foo
11/26 02:57, 44F

11/26 06:20, , 45F
我好奇原PO是不是不知道VisualStudio可以瀏覽一個DLL底下
11/26 06:20, 45F

11/26 06:21, , 46F
的所有命名空間和所有類別
11/26 06:21, 46F

11/26 06:24, , 47F
把時間花在這 坦白說真的沒啥意義...
11/26 06:24, 47F

11/26 10:23, , 48F
建議樓主弄清何謂Namespace以及其真正用途.
11/26 10:23, 48F

11/26 12:32, , 49F
同意樓上
11/26 12:32, 49F

11/26 12:43, , 50F
這就像在路上喊一聲"志明"或"春嬌"~結果有好幾人回頭一樣
11/26 12:43, 50F
文章代碼(AID): #1CxYRsEx (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1CxYRsEx (C_Sharp)