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

标签 .net oop

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/

相关文章:

.net - VC++ 代码 DOM 可以从 VS 插件访问吗?

.net - 在 Azure 应用服务应用程序中向本地主机发出请求

c# - 构造函数和继承

javascript - 如何通过只是对对象的引用的变量来为对象赋值?

javascript - 在javascript中访问对象内数组内的对象

c# - 从字符串名称在程序集中创建类实例

.net - 你如何 'cancel' 一个 UdpClient::BeginReceive?

c# - CollectionBase 类是否仍然受支持?

javascript - :hover style sticking on iOS browser

python - 使用元类的 __call__ 方法而不是 __new__?