HttpServerUtility包含一个名为UrlEncode的公共函数。它不是一个共享函数。HttpServerUtility没有任何公共构造函数。
这样做会失败:
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。
编辑:虽然我非常喜欢每个人都参与了一场关于面向对象的大讨论,但我认为问题出在MSDN文档的错误上。行"Dim instance As HttpServerUtility“应为"Dim instance As MSDN = Context.Server”我包含的代码(来自MSDN文档)实际上并不起作用,而是抛出一个空引用异常-正如您所预期的那样。谢谢,杰森!
发布于 2010-01-07 05:03:30
你确定这行得通吗?
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在HttpServerUtility中没有定义为Shared方法。
您需要一个非空的HttpServerUtility实例。正确使用HttpServerUtility的方法如下:
Dim instance As HttpServerUtility = HttpContext.Server
Dim s As String = "Hello, World!"
Dim result As String = instance.UrlEncode(s)另一种选择是只使用具有Shared方法HttpUtility.UrlEncode的HttpUtility
Dim s As String = "Hello, World!"
Dim result As String = HttpUtility.UrlEncode(s)发布于 2010-01-07 05:13:23
首先,您给出的两个代码示例都不起作用。
第一个示例将不起作用,因为UrlEncode是一个实例方法,因此您不能在类型上调用它,即HttpServerUtility.UrlEncode(encodeMe)。
第二个示例将不起作用,因为变量尚未赋值。
这与静态构造函数无关,因此发布的答案具有误导性。
HttpServerUtility类型被设计为只能由System.Web程序集在内部进行初始化。您不能创建自己的实例。您可以使用HttpContext.Server (返回HttpServerUtility的实例)在web应用程序中访问它的实例。
发布于 2010-01-07 05:06:19
使用HttpUtility.UrlEncode()而不是HttpServerUtility.UrlEncode().HttpServerUtility上的版本是一个实例方法,而不是一个共享/静态方法。这与静态构造函数无关(静态构造函数将在第一次调用类中的静态方法时调用)
https://stackoverflow.com/questions/2016133
复制相似问题