HttpServerUtility 包含一个名为 UrlEncode 的公共(public)函数。它不是共享功能。 HttpServerUtility 没有任何公共(public)构造函数。
这样做会失败:
Dim encodeMe As String = "a string to be encoded!"
HttpServerUtility.UrlEncode(encodeMe) 'Bombs out
这是可行的,这就是微软所说的这样做:
Dim instance As HttpServerUtility
Dim encodeMe As String = "a string to be encoded!"
instance.UrlEncode(encodeMe ) 'Works!
他们是如何做到这一点的?您无法使用构造函数实例化它的实例,但您无法仅通过引用 HttpServerUtility.UrlEncode 来访问 UrlEncode。
编辑:虽然我非常高兴每个人都参与到大型 OO 辩论中,但我相信问题在于 MSDN 文档有缺陷。 “Dim instance As HttpServerUtility”行应为“Dim instance As HttpServerUtility = Context.Server” 我包含的代码(来自 MSDN 文档)实际上不起作用,而是抛出一个空引用异常 - 就像你一样d 期望。谢谢你,杰森!
最佳答案
你确定这行得通吗?
Dim instance As HttpServerUtility
Dim encodeMe As String = "a string to be encoded!"
instance.UrlEncode(encodeMe) 'Works!
这会给你一个
NullReferenceException
在运行时(并且编译器会给你一个警告,instance
没有被分配给)。说真的,微软在这里什么都没做。上面的代码是灾难性的错误,会在运行时死掉。你不能这样做
Dim encodeMe As String = "a string to be encoded!"
HttpServerUtility.UrlEncode(encodeMe) 'Bombs out
因为
UrlEncode
未定义为 Shared
HttpServerUtility
中的方法.您需要
HttpServerUtility
的非空实例.正确使用方法HttpServerUtility
是这样的:Dim instance As HttpServerUtility = HttpContext.Server
Dim s As String = "Hello, World!"
Dim result As String = instance.UrlEncode(s)
另一种选择是只使用
HttpUtility
有一个 Shared
方法HttpUtility.UrlEncode
:Dim s As String = "Hello, World!"
Dim result As String = HttpUtility.UrlEncode(s)
关于.net - 微软是如何做到这一点的? (关于他们的 .NET HttpServerUtility 类的 OO 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2016133/