Dot-Net
微軟是如何做到這一點的?(關於他們的 .NET HttpServerUtility 類的 OO 問題)
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未定義Shared為HttpServerUtility.您需要一個非空實例
HttpServerUtility。正確的使用方法HttpServerUtility是這樣的:Dim instance As HttpServerUtility = HttpContext.Server Dim s As String = "Hello, World!" Dim result As String = instance.UrlEncode(s)另一種選擇是只使用
HttpUtilitywhich there is aSharedmethodHttpUtility.UrlEncode:Dim s As String = "Hello, World!" Dim result As String = HttpUtility.UrlEncode(s)