Dot-Net

微軟是如何做到這一點的?(關於他們的 .NET HttpServerUtility 類的 OO 問題)

  • September 21, 2014

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。

編輯:雖然我非常高興每個人都參與到大型 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未定義SharedHttpServerUtility.

您需要一個非空實例HttpServerUtility。正確的使用方法HttpServerUtility是這樣的:

Dim instance As HttpServerUtility = HttpContext.Server
Dim s As String = "Hello, World!"
Dim result As String = instance.UrlEncode(s)

另一種選擇是只使用HttpUtilitywhich there is a Sharedmethod HttpUtility.UrlEncode

Dim s As String = "Hello, World!"
Dim result As String = HttpUtility.UrlEncode(s)

引用自:https://stackoverflow.com/questions/2016133