【IT168技术文档】
这一章关于用C#写组件。你学到如何写一个组件,如何编译它,且如何在一个客户程序中使用它。更深入一步是运用名字空间来组织你的应用程序。
这章由两个主要大节构成:
。你的第一个组件
。使用名字空间工作
8.1 你的第一个组件
到目前为止,在本书中提到的例子都是在同一个应用程序中直接使用一个类。类和它的使用者被包含在同一个执行文件中。现在我们将把类和使用者分离到组件和客户,它们分别位于不同的二进制文件中(可执行文件)。
尽管你仍然为组件创建一个 DLL,但其步骤与用C++写一个COM组件差别很大。你很少涉及到底层结构。以下小节说明了如何构建一个组件以及使用到它的客户:
。构建组件
。编译组件
。创建一个简单的客户应用程序
8.1.1 构建组件
因为我是一个使用范例迷,我决定创建一个相关Web的类,以方便你们使用。它返回一个Web网页并储存在一个字符串变量中,以供后来重用。所有这些编写都参考了.NET框架的帮助文档。
类名为RequestWebPage;它有两个构造函数—— 一个属性和一个方法。属性被命名为URL,且它储存了网页的Web地址,由方法GetContent返回。这个方法为你做了所有的工作(见清单8.1)。
清单 8.1 用于从Web服务器返回HTML网页的RequestWebPage 类
1: using System; 2: using System.Net; 3: using System.IO; 4: using System.Text; 5: 6: public class RequestWebPage 7: { 8: private const int BUFFER_SIZE = 128; 9: private string m_strURL; 10: 11: public RequestWebPage() 12: { 13: } 14: 15: public RequestWebPage(string strURL) 16: { 17: m_strURL = strURL; 18: } 19: 20: public string URL 21: { 22: get { return m_strURL; } 23: set { m_strURL = value; } 24: } 25: public void GetContent(out string strContent) 26: { 27: // 检查 URL 28: if (m_strURL == "") 29: throw new ArgumentException("URL must be provided."); 30: 31: WebRequest theRequest = (WebRequest) WebRequestFactory.Create(m_strURL); 32: WebResponse theResponse = theRequest.GetResponse(); 33: 34: // 给回应设置字节缓冲区 35: int BytesRead = 0; 36: Byte[] Buffer = new Byte[BUFFER_SIZE]; 37: 38: Stream ResponseStream = theResponse.GetResponseStream(); 39: BytesRead = ResponseStream.Read(Buffer, 0, BUFFER_SIZE); 40: 41: //使用 StringBuilder 以加速分配过程 42: StringBuilder strResponse = new StringBuilder(""); 43: while (BytesRead != 0 ) 44: { 45: strResponse.Append(Encoding.ASCII.GetString(Buffer,0,BytesRead)); 46: BytesRead = ResponseStream.Read(Buffer, 0, BUFFER_SIZE); 47: } 48: 49: // 赋给输出参数 50: strContent = strResponse.ToString(); 51: } 52: }