8.2.2 在客户应用程序中使用名字空间
由于你使用了名字空间开发组件,所以客户也要引入名字空间
using Presenting.CSharp;
或者给名字空间中的成员使用完全资格名(fully qualified name),例如
Presenting.CSharp.WhoisLookup.Query(……);
如果你不期望在名字空间中引入的成员之间出现冲突,using 标志( directive)是首选,特别是由于你具有很少的类型时。使用组件的客户程序样本在清单8.4中给出。
清单 8.4 测试 WhoisLookup 组件
1: using System;
2: using Presenting.CSharp;
3:
4: class TestWhois
5: {
6: public static void Main()
7: {
8: string strResult;
9: bool bReturnValue;
10:
11: try
12: {
13: bReturnValue = WhoisLookup.Query("microsoft.com", out strResult);
14: }
15: catch (Exception e)
16: {
17: Console.WriteLine(e);
18: return;
19: }
20: if (bReturnValue)
21: Console.WriteLine(strResult);
22: else
23: Console.WriteLine("Could not obtain information from server.");
24: }
25: }
第2行利用using 标志引入了Presenting.CSharp名字空间。现在,我无论什么时候引用WhoisLookup ,都可以忽略名字空间的完全资格名了。
该程序对 microsoft.com 域进行一次Whois 查找——你也可以用自己的域名代替microsoft.com .允许命令行参数传递域名,可使客户的用途更广。清单8.5 实现了该功能,但它不能实现适当的异常处理(为了使程序更短)。
清单 8.5 传递命令行参数给Query 方法
1: using System;
2: using Presenting.CSharp;
3:
4: class WhoisShort
5: {
6: public static void Main(string[] args)
7: {
8: string strResult;
9: bool bReturnValue;
10:
11: bReturnValue = WhoisLookup.Query(args[0], out strResult);
12:
13: if (bReturnValue)
14: Console.WriteLine(strResult);
15: else
16: Console.WriteLine("Lookup failed.");
17: }
18: }
你所必须做的就是编译这个应用程序:
csc /r:whois.dll whoisclnt.cs

