首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微软是如何做到这一点的?(关于他们的.NET HttpServerUtility类的OO问题)

微软是如何做到这一点的?(关于他们的.NET HttpServerUtility类的OO问题)
EN

Stack Overflow用户
提问于 2010-01-07 04:50:56
回答 4查看 1.1K关注 0票数 8

HttpServerUtility包含一个名为UrlEncode的公共函数。它不是一个共享函数。HttpServerUtility没有任何公共构造函数。

这样做会失败:

代码语言:javascript
复制
Dim encodeMe As String = "a string to be encoded!"
HttpServerUtility.UrlEncode(encodeMe) 'Bombs out

这是可行的,这是微软所说的方式:

代码语言:javascript
复制
Dim instance As HttpServerUtility
Dim encodeMe As String = "a string to be encoded!"

instance.UrlEncode(encodeMe ) 'Works!

他们是怎么做到的?您不能使用构造函数实例化它的实例,也不能仅通过引用HttpServerUtility.UrlEncode来访问UrlEncode。

编辑:虽然我非常喜欢每个人都参与了一场关于面向对象的大讨论,但我认为问题出在MSDN文档的错误上。行"Dim instance As HttpServerUtility“应为"Dim instance As MSDN = Context.Server”我包含的代码(来自MSDN文档)实际上并不起作用,而是抛出一个空引用异常-正如您所预期的那样。谢谢,杰森!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-07 05:03:30

你确定这行得通吗?

代码语言:javascript
复制
Dim instance As HttpServerUtility
Dim encodeMe As String = "a string to be encoded!"
instance.UrlEncode(encodeMe) 'Works!

这会在运行时给你一个NullReferenceException (编译器会给你一个警告,告诉你instance没有被赋值)。说真的,微软在这里什么也没做。上面的代码是灾难性的错误,并将在运行时终止。

你不能这么做

代码语言:javascript
复制
Dim encodeMe As String = "a string to be encoded!"
HttpServerUtility.UrlEncode(encodeMe) 'Bombs out

因为UrlEncodeHttpServerUtility中没有定义为Shared方法。

您需要一个非空的HttpServerUtility实例。正确使用HttpServerUtility的方法如下:

代码语言:javascript
复制
Dim instance As HttpServerUtility = HttpContext.Server
Dim s As String = "Hello, World!"
Dim result As String = instance.UrlEncode(s)

另一种选择是只使用具有Shared方法HttpUtility.UrlEncodeHttpUtility

代码语言:javascript
复制
Dim s As String = "Hello, World!"
Dim result As String = HttpUtility.UrlEncode(s)
票数 17
EN

Stack Overflow用户

发布于 2010-01-07 05:13:23

首先,您给出的两个代码示例都不起作用。

第一个示例将不起作用,因为UrlEncode是一个实例方法,因此您不能在类型上调用它,即HttpServerUtility.UrlEncode(encodeMe)。

第二个示例将不起作用,因为变量尚未赋值。

这与静态构造函数无关,因此发布的答案具有误导性。

HttpServerUtility类型被设计为只能由System.Web程序集在内部进行初始化。您不能创建自己的实例。您可以使用HttpContext.Server (返回HttpServerUtility的实例)在web应用程序中访问它的实例。

票数 4
EN

Stack Overflow用户

发布于 2010-01-07 05:06:19

使用HttpUtility.UrlEncode()而不是HttpServerUtility.UrlEncode().HttpServerUtility上的版本是一个实例方法,而不是一个共享/静态方法。这与静态构造函数无关(静态构造函数将在第一次调用类中的静态方法时调用)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2016133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档