C# : .NET

[".0s4*0|collections;datetime-format;collections",["F@eA","SEECJCLNECKLJAHAGALA","OOOCSTUUUUTTUUUUYFADHDHDOCCBPADHDADOCPADHDGDADHDGDOCBOBPGDOCCPGDGDOWSTTUUUUTTUUUU","sw.rssrh.",".NET","Array","Dictionary","List","String","2D","Async","Console","DataTable","Dates","DateTime","Enum","File","For","Foreach","Format","IEnumerable","If","IndexOf","Lambda","LINQ","Optimization","Parse","Path","Process","Property","Random","Regex","Replace","Sort","Split","Static","Substring","Switch","Tuple","While","Overload."," Overloaded methods improve code clarity. When designing complex programs, code changes and some branches become unnecessary.","Overload, notes."," We add overloaded methods to eliminate complexity and enhance performance. Overloads can differ based on arguments.","First example."," Overloaded methods are separate in the compiled program. A method receiving a string parameter is separate from one receiving no parameter or an int. ","Note: ","The methods are stored at different locations within the metadata. We have a method group with a single name.","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","Based on:"," .NET 4.6\n\n","C# program that has overloaded methods","\n\nclass Program\n{\n static void Main()\n {\n MethodA();\n MethodA(","\"\"",");\n }\n\n static void ","MethodA","()\n {\n }\n\n static void ","MethodA","(string a)\n {\n }\n}","Example 2."," Next we look at one situation where you can apply overloaded methods. This is a simple way of improving code readability and performance. Here's some code that is problematic. ","Example: ","The code writes the word Popular to the screen if the string argument is empty.","And: ","Otherwise, it writes the category name. But this code is inefficient and confusing. We can entirely avoid the string.Empty argument.","string.Empty ","string-empty","C# program that has no overloaded methods","\n\nusing System;\n\nclass Program\n{\n public static void Main()\n {\n ShowString(string.Empty);\n ShowString(","\"Category\"",");\n }\n\n static void ","ShowString","(string value)\n {\n if (value == string.Empty)\n {\n Console.WriteLine(","\"Popular\"",");\n }\n else\n {\n Console.WriteLine(value);\n }\n }\n}","Example 3."," The code above has an unnecessary branch, but this is not optimized out. The code calls into ShowString, but we know that the string is never empty at that call site. ","Note: ","Removing branches increases performance. Processors use branch prediction, but this is not ideal.","C# program that implements overloaded method","\n\nusing System;\n\nclass Program\n{\n public static void Main()\n {\n ShowString();\n ShowString(","\"Category\"",");\n }\n\n static void ","ShowString","()\n {","\n // Send default argument to overload.\n ","ShowString(","\"Popular\"",");\n }\n\n static void ","ShowString","(string value)\n {","\n // We don't need an if check here, which makes\n // ... calling this method directly faster.\n ","Console.WriteLine(value);\n }\n}","Notes, above example."," There is an overload with no parameters, and one with a string parameter. Overloaded methods always have different parameters. ","Note: ","Look at what happens when ShowString is called the second time. It goes directly from the call site to the Console.WriteLine part.","Console.WriteLine ","console","Internals."," Here we look into the intermediate language to see what the overloaded methods become when first compiled. Let's look inside the ShowString method that has the if-statement. ","IL ","il","Compiled method that does not use overloading: IL","\n\n.method private hidebysig static void ShowString(string 'value') cil managed\n{","\n // Code size 31 (0x1f)\n ",".maxstack 8\n IL_0000: ldarg.0\n IL_0001: ldsfld string [mscorlib]System.String::Empty\n IL_0006: call bool [mscorlib]System.String::op_Equality(string,\n string)\n IL_000b: brfalse.s IL_0018\n IL_000d: ldstr \"Popular\"\n IL_0012: call void [mscorlib]System.Console::WriteLine(string)\n IL_0017: ret\n IL_0018: ldarg.0\n IL_0019: call void [mscorlib]System.Console::WriteLine(string)\n IL_001e: ret\n}","Internals, continued."," The if chain in ShowString uses an op_Equality. None of this is compiled out and it also isn't optimized away during JIT compilation. ","Next: ","We show how the overloaded methods are called in the second example. The methods are separate.","And: ","The compiler can easily tell the difference between overloads with different parameters.","Compiled methods that use overloading: IL","\n\n.method public hidebysig specialname rtspecialname\n instance void .ctor() cil managed\n{","\n // Code size 22 (0x16)\n ",".maxstack 8\n IL_0000: ldarg.0\n IL_0001: call instance void [mscorlib]System.Object::.ctor()\n IL_0006: call void OverloadA::ShowString()\n IL_000b: ldstr \"Category\"\n IL_0010: call void OverloadA::ShowString(string)\n IL_0015: ret\n}\n\n.method private hidebysig static void ShowString() cil managed\n{","\n // Code size 11 (0xb)\n ",".maxstack 8\n IL_0000: ldstr \"Popular\"\n IL_0005: call void OverloadA::ShowString(string)\n IL_000a: ret\n}","Final notes."," The ShowString method doesn't need any if-else chain at all. It simply does what it is told, without any checking. The code will be more efficient.","A summary."," It is possible to refactor code to use method overloading. The overloads are easily inferred by the compiler. You can streamline code. ","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","3679700504","data-ad-format","link","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto"],"url(data:image/png;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAABpCAMAAADflzs9AAAAVFBMVEX////2+fju9PHy9/X0+Pbx9vTo8Ozj7ejZ5uDP4tmwz8Dd6uTL3dTV49x8sJe208Wuzr/P39drpoq61chopIecw7CSvahgn4F1rJFjoYOAsppyqo9IgRfDAAACtElEQVR4Xu3XyVKEMBSF4cxh7Hn2/d9TrtE+VUhTaJrcLPIvLGXjJyegiq/0ZfPIoIBRt2sOBYzLCePzwZiA+bgwtvnBaNES5iylYUlrLbffGGnlF+YiteJKNyPMWUjNkh0wu18YprTNCCM1PwZpZfLBmJwwumAKpmAKpmCSVzAFUzAF47oQvlgCcEMrYtxfMBboVTBtTpguG4wfDCoXjCXQNMb3g6/3Iwo1Bvlq3/Wti8aIfdfVwFCghtw8BnP3JhbjCQEMLMjNYhSAdSyGFO43Zk+KvuoJs39iTLhQDT0xNSm86wM7DiPCww0MoA6fvD7A6ueOtKSPxVSkGGPa502vCTuD8T9YQ8xYDDHUGENr+Oc362cw9LNYQRHGRmJoJz/GYBwoxxgcLmepeEwYov4/pkPxmDCEeRNGxGIsTTJ/ZtJhaPbqH08T2AqAaAzt5Be+ZwxhzOjR7u3bMEG16A2MWSqBlx6qojHYff53E2YhJy68GVMBA820RVjAoXkTBqz5v2eQaseXXRU2da7831QwBbNmUjapMPK4na1pds0lFcadrgtKhTlkhPH5YIxoCXM/ve5wSIXRAbNTbjLvvFKXK3VOgJEVYRqpJ7PWmPPTsjJG2m+MsFMpZRUsqTBbIScyRmhYEmJeBEsSTAvMjCUl5jhv4cfAwo+BhR8DSzKMUMBMWh4yIeblTE2wWJEQo19gtsGihGC+M7A4wYyBZaPA4JsJG/HfGVj4McfReeF66cGygYURc8RG3BicF34Mzgs/BueFGwOLEvwYbMSPgYUbsx2dF14MLPyYY4eNuDH3xwGW5BhkFDmw0SLMppls20S0o84nWJZhEgQLP+bmxTLMx/qWUy8WYjbX+7pdb5VYlFau7uq12g8NH71YilHGGLlKhpJieUZbtWbWavGH5MqJuEqfDRAN8iKPPjsAAAAASUVORK5CYII=)","url(data:image/png;base64,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)"]

["url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMsAAADhCAMAAABRErFRAAAAMFBMVEX////8+fr//P304+325/D69Pj26vH57/SjD2a7VY7Ogqz74OzYpsDjzNbivM/y2OTrIiD8AAADWUlEQVR4XuzczWrDMBBFYS3v/Eh+/7ctpQ3BGQo4RIpTn1ndnflWPpDgJskiwiT9ORURXucWkb+zR4zfmRHbbbaHk2S9d5O0n9pPr3P0nnVm77fnemuSfA/wOveWvFtGtYxnLFYAhy35bYl5Vy193rVmNk0iPVrMpkmk1iIWWnq/oAWL+UKL+VSLtNAivd+CJXOhxf0/vStPa8Fi0ySmYqFh3mTBQsPQMFjSL9swNAwNQ8PQMFjcF1qchsHy0nMa5tnDQsPMtRgNs8CCxfNjG4aGweK20OJGw2ChYWiYM1mwJA1Dw9AwNMwVLFjMFlrMaBgsNAwNcxYLDWM0zCELFhpm2xY2zBg0zAUtORZaMmkYLK88u27D0DBYaBgaBsugYWgYGoaGuYIFi69umNFXvl9oGBrmFUfDYKFhaBgsNMzy9wsNcznLR3cyDYPFVlpMNAwWGubIf+BzasPQMFjO+3slDSNlROjnfD+tTNtPL1P3WS2Ssvd+e8Juls/DH/xofLXU+fwX/KulAuq02zz4Bf8vdukgBYIYhILo33QoG03uf9sRIX2CARLwAX9tgfqf1lprrbXWWluxKY1IQzl6cpaKhrvHo9MZm5KTfAERgKk4ZZ3fYgYYKIWBxQR8GMwvxUjj+BYPMIGSJpheyDVMSQN4FYDrbNOjWty/w2Ukge88QjIwHa9aNoNFIiC+F1vVwmUtLzhY7fO1xJUtTnpr7UtlStz3Y4vkUavyADYccJ3OSWgjrdpQ0aRgz20tBtSiLYz0Vsr9RoRu0VprrbXWWvu1W3crCEJBFIXb8/v+bxxKJGphDXQYbc/VRjjAd+XS+UxEcjfjxdw+BJBHM6YxwGLzhYj4MvPdVN0+BJAfzCEW+erCnhZ8dWHtLCJFCzDAYlG0WLSzqBUtaie3ZBYtme0spkWL6QUstNCSWbREtrOIFC1AC0v/hmHDRBYtwYbpY3EvWpwN08tCCy1Rbpj4u4ahhQ2T5YbJCzQMG8ZbWdgwtNBiUbQYG+YXRwtQtMAHWNKLDZNsmD4W4CINw4ahhZZoa2HDsGHa/V+83DDeqGHYMN0sbBhaaKEFYMOc3+J+yYZxNsxPLWoGEdh08/T9lGWuHwKP78dziEV1Aqjq+ynLXD8Eng+P5u0OPSdCoM89JxEAAAAASUVORK5CYII=)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAB4BAMAAADS7QcCAAAAGFBMVEX////0ctuZsLL4pOe8y8z4oej4qunCz9FAYxXHAAAAf0lEQVR42u3XwQ1AQBQG4YcGvAgFbCSudCCiAQcFuGhB+xJHm/+wsnGaKeC7j7mstldlkJnvoi1m+lUUrDFRFTOziRYYGBgYGBgYGBgYGBiYj4yfoiNmhksUcr0mEdFT4bIkpjtFacxoogkGBgYGBgYGBgYGBgbmB6bdRZ7pNW8Oq3ex+r2t+QAAAABJRU5ErkJggg==)","url(data:image/jpeg;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL4AAABBCAMAAABYbu5jAAAAMFBMVEX///+1wv+jqv9siv/p6//W3f8zZv9gb//19v9NK/8zAP999//S//8z//8zzP+z6P/0gInFAAABg0lEQVR4XtXXy1ICURAD0H7c96D+/9/KQqkhlEKD0iTrWZzKYtJXbou2s+jvn1Q55f2mfAMOb6Ec5D6+c/ObcvOdm98qN9+5+a1w842b3wo33/6Dv2H22g3zCL+PKF/uSKDsGL8pN9+5+U25+c7Nb5Wb74R8h+ki41eYLja+Qf1k/AL1k/HF4XIg4ytMFxl/X7/z8aF+Ov6A6bqR//FTnswXa2B96LmyPZtfoH4yvsDlwMaHy4GLj/Xz8RXqJ+PD5UDGh+ni448O08XEh+lSrtUVnC6qm+ey/krGx+li4+N0sfHh7Cfj43Sx8bF+Mj5OFxkf67c8frF+jJUovzRIBr/4+kovMb5YPr/OdcrUGL9k8FG/Tw3xxbP55/o1R4hfk/m6IBbii+fyJ/JnjK+5/HWRGuJLfzG+xvh6lX89f8m3GH90ar7Ya/FrkF8y+XNhRpAvlsi3+H8fUxP5A+svYb54Hl8Uy4/zNZEvCvo4XzyRLzrhXg7zNZMvw/o6ptsQpvDnE+wJyVGQ5SG7AAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAABdCAMAAAACPw0RAAAAMFBMVEX////h//Tn//by//vc//Ls//j27vzu3vrcvPT5//3lzPfixvbQnfH59P38+f7m7/cPuDyhAAACwUlEQVR4Xu3ZC7KbMAxAUST5+4Hsf7clbRkRFIfi2I+44S5AORhsmMmQiRCUUqD98CQTXUrJBTOcnwe1hBLq0lKcCgHeE+k5mvPb5RiNtSHEGOasGV/+BqlVsJlk07qChSWNsIR/upt/gycbXBK5YMe8lAPwUsqNB52o5h6l+m9kBXNnUfxGCjhwk7jiQ1BQakNlqRW6XSpuqUAMiGKEPbID8tKbS8epQgooFrVkWbV6IQ0pHaeSkAKIPVXwtAIPlVKXSqhaUnljhSSzjaV5Kkop0gJwpVQpZSq59EFUlDNZGlMxVU71CyCWUemV9JZKqXpLxRXVZmaUbykiV0z1ciwfVibJBGzv6llKczZDc3N7KwJiLDFALkHYpz6T0nKnnjGjHVffLsHlqCQXlbMFxyrJ+0RyIBcmYTLWzVQZyk3FxeObCpgqJ7qSZ59DsQLc5I7e/uGVdCqTcpqpy1wuHDxTaSsl8UCJiQfyyIe/yMRlSceCzxTU8ro5NxTkichnAJOx1v7rnQJ5+zknFvXMNlJ8AIhD+tTkk5rfVfFUqZcvac581P0nSc0fAOZsKkv7og6vqOP5VJbqd6ioRDzaHfuO5C6qCOpS19Ja1IvK43QfVKxJvag8TfdBxU+j6jl8jKlOtqG6XKb+KwDu5a47lWd/kIo1qF6ETL3dM+vciVSZVpA/X+KHUdV3Uy/q2vpfU+HnqNgXVVWmQksqWw9QtQh5UowxPOY2ohgymSLqiV9W+1T/4VRVjcrWjqjYkgqNqBcV36SytScq1qZeVOiBKl99F1X3QcUq1LX1u6nQJXV4k8rWFtSLCg2oa2kVqmpD1d9MZWt9KnREZWldKvRAVW2o0BsV+6LqelTVggoNqf4bqP5JuEhvt/3/razZNjaiKhnv/1SUy1FVF9SLChd17supF1W1OAEuqmpDhS+nqmLqLwrW+B/boDYKAAAAAElFTkSuQmCC)","url(data:image/jpeg;base64,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)","url(data:image/jpeg;base64,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)"]