c# - Uri.ToString()और Uri.AbsoluteUri के बीच क्या अंतर है?




.net (5)

सही जांच क्यों न करें?

string GetUrl(Uri uri) => uri?.IsAbsoluteUri == true ? uri?.AbsoluteUri : uri?.ToString();

अभी एक Azure सवाल पर एक टिप्पणी के रूप में, @ smarx नोट किया

मुझे लगता है कि blob.Uri.AbsoluteUri blob.Uri.ToString () से सामान्य रूप से बेहतर है।

क्या इसका कोई कारण है? Uri.AbsoluteUri लिए Uri.AbsoluteUri नोट करता है कि यह "पूर्ण यूआरआई प्राप्त करता है", Uri.ToString() "निर्दिष्ट उदाहरण के लिए एक Uri.ToString() स्ट्रिंग प्रस्तुति देता है।"


चूंकि सभी को लगता है कि uri.AbsoluteUri बेहतर है, लेकिन क्योंकि यह सापेक्ष पथों में विफल रहता है, तो शायद सार्वभौमिक तरीका होगा:

Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string notCorruptUri = Uri.EscapeUriString(uri.ToString());

उदाहरण के लिए दिया गया:

UriBuilder builder = new UriBuilder("http://somehost/somepath");
builder.Query = "somekey=" + HttpUtility.UrlEncode("some+value");
Uri someUri = builder.Uri;

इस मामले में, Uri.ToString() एक मानव-पठनीय यूआरएल वापस करेगा: http://somehost/somepath?somekey=some+value

Uri.AbsoluteUri दूसरी तरफ एन्कोडेड फॉर्म को HttpUtility के रूप में वापस कर http://somehost/somepath?somekey=some%2bvalue ने इसे वापस कर दिया: http://somehost/somepath?somekey=some%2bvalue


इसके अतिरिक्त: यदि आपका Uri एक रिश्तेदार Uri AbsoluteUri असफल हो जाएगा, ToString() नहीं।

Uri uri = new Uri("fuu/bar.xyz", UriKind.Relative);
string str1 = uri.ToString(); // "fuu/bar.xyz"
string str2 = uri.AbsoluteUri; // InvalidOperationException

बाध्यकारी कोड की एक इकाई को नाम मैप करने की प्रक्रिया है।

देर बाध्यकारी का मतलब है कि हम नाम का उपयोग करते हैं, लेकिन मानचित्रण को रोकते हैं। दूसरे शब्दों में, हम पहले नाम बनाते / उसका उल्लेख करते हैं, और कुछ अनुवर्ती प्रक्रिया को कोड के मानचित्रण को उस नाम पर संभालते हैं।

अब विचार करें:

  • मनुष्यों की तुलना में, मशीन खोज और छंटाई में वास्तव में अच्छी हैं
  • मशीनों की तुलना में, इंसान आविष्कार और नवाचार में वास्तव में अच्छे हैं

तो, संक्षिप्त उत्तर यह है: virtual मशीन (रनटाइम) के लिए देर से बाध्यकारी निर्देश है जबकि abstract मानव (प्रोग्रामर) के लिए देर से बाध्यकारी निर्देश है

दूसरे शब्दों में, virtual मतलब है:

"प्रिय रनटाइम , जो भी आप सबसे अच्छा करते हैं, उसके द्वारा उपयुक्त कोड को बाध्य करें: खोजना "

जबकि abstract साधन हैं:

"प्रिय प्रोग्रामर , कृपया जो भी आप सबसे अच्छा करते हैं, उसके द्वारा उपयुक्त नाम को बाध्य करें: आविष्कार "

पूर्णता के लिए, ओवरलोडिंग का अर्थ है:

"प्रिय कंपाइलर , जो भी आप सबसे अच्छा करते हैं, उसके द्वारा उपयुक्त कोड को बाध्य करें: सॉर्टिंग "।





c# .net