作者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