{"id":453716,"date":"2025-03-29T15:01:12","date_gmt":"2025-03-29T15:01:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=453716"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=453716","title":{"rendered":"<span>\u041e\u0442\u0431\u0438\u0442\u044b\u0439 \u0434\u043e\u0442\u043d\u0435\u0442<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <a href=\"https:\/\/habr.com\/ru\/articles\/886080\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0448\u043b\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043f\u0440\u043e \u00ab\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0443\u044e\u00bb Java \u0432\u044b\u0437\u0432\u0430\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0421# \u0441\u00a0\u0442\u0435\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438\u00a0\u2014 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0448\u0430\u0442\u0430\u0435\u043c .NET!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/65e\/fb6\/cc7\/65efb6cc783b435aeb9f47bab74e49c0.jpeg\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/65e\/fb6\/cc7\/65efb6cc783b435aeb9f47bab74e49c0.jpeg\" data-blurred=\"true\"\/><\/figure>\n<h3>\u0412\u0432\u043e\u0434\u043d\u0430\u044f<\/h3>\n<p>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 <a href=\"https:\/\/dotnet.microsoft.com\" rel=\"noopener noreferrer nofollow\">.NET<\/a> \u0438\u00a0\u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043d\u0435\u0435 C#, \u043a\u0430\u043a \u0438\u00a0Java, \u0438\u043c\u0435\u044e\u0442 \u0447\u0435\u0442\u043a\u0443\u044e \u0438\u00a0\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0443\u044e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0441\u0430\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u043f\u0440\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0438 \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0438 Microsoft, \u0442\u0430\u043a \u0438\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u041a\u0430\u043a \u0438\u00a0Java\u00a0\u2014 .NET \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u0430\u043a \u0438\u00a0Java\u00a0\u2014 C# \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f <strong>\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c<\/strong>.<\/p>\n<blockquote>\n<p>\u0425\u043e\u0442\u044f \u044f\u00a0\u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u044e\u00a0\u2014 \u043a\u0430\u043a \u0438\u00a0\u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u0435\u043d \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 <em>\u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/em>. <\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u043c\u0438\u0440\u0435 Java, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 .NET \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u044f\u0442 \u0442\u0440\u044e\u043a\u0438 \u0438 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u043d\u0443\u0442 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u043c \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430.<\/p>\n<h3>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0440\u0435\u0434\u0430<\/h3>\n<p>\u0420\u0430\u0434\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043d\u0430\u043a\u0430\u043b\u0430 \u0440\u0430\u0434\u043e\u0441\u0442\u0438 \u0438 \u0432\u0435\u0441\u0435\u043b\u044c\u044f, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0431\u044b\u043b\u0430 \u0432\u0437\u044f\u0442 <a href=\"https:\/\/dotnet.microsoft.com\/en-us\/download\" rel=\"noopener noreferrer nofollow\">.NET Core 9 \u0434\u043b\u044f Linux<\/a>. \u0417\u0430\u043e\u0434\u043d\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u043f\u0440\u0438\u0447\u0438\u0442\u0430\u043d\u0438\u0439, <s>\u043e\u0442\u043c\u0430\u0437\u043e\u043a \u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043e\u043a<\/s> \u043f\u0440\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Windows \u0438 \u0442\u044f\u0436\u0435\u043b\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0435.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0432 Linux-\u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0442\u043d\u0435\u0442\u0430 \u0437\u0430\u0447\u0435\u043c-\u0442\u043e <a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/12713\" rel=\"noopener noreferrer nofollow\">\u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443<\/a> \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 .cs \u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<blockquote>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u0430\u00a0\u2014 \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/km-hussain-in\/CourseSamples\/tree\/main\/CSharp\" rel=\"noopener noreferrer nofollow\">\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 bash-\u0441\u043a\u0440\u0438\u043f\u0442<\/a>, \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432 \u0440\u0443\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  #dotnethome=`dirname \"$0\"` dotnethome=`dirname \\`which dotnet\\`` sdkver=$(dotnet --version) fwkver=$(dotnet --list-runtimes | grep Microsoft.NETCore.App | awk '{printf(\"%s\", $2)}') tfm=\"net${fwkver%.*}\" dotnetlib=$dotnethome\/packs\/Microsoft.NETCore.App.Ref\/$fwkver\/ref\/$tfm  if [ \"$#\" -lt 1 ]; then dotnet $dotnethome\/sdk\/$sdkver\/Roslyn\/bincore\/csc.dll -help exit 1 fi if ! test -f \"csc-$fwkver.rsp\"; then   for f in  $dotnetlib\/*.dll; do echo -r:$(basename $f) &gt;&gt; \/tmp\/csc-$fwkver.rsp   done fi  for arg in \"$@\" do if [[ \"$arg\" == *\"out:\"* ]]; then   prog=\"${arg:5}\"   break fi if [[ \"$arg\" == *\".cs\" ]]; then   prog=\"${arg%.*}.dll\" fi   done dotnet $dotnethome\/sdk\/$sdkver\/Roslyn\/bincore\/csc.dll -nologo -out:\"$prog\" -lib:\"$dotnetlib\" @\/tmp\/csc-$fwkver.rsp $*  if [ $? -eq 0 ]; then   if test -f \"$prog\"; then     if [[ \"$*\" != *\"t:library\"* ]] &amp;&amp; [[ \"$*\" != *\"target:library\"* ]]; then if ! test -f \"${prog%.*}.runtime.config\"; then echo \"{   \\\"runtimeOptions\\\": {     \\\"framework\\\": {       \\\"name\\\": \\\"Microsoft.NETCore.App\\\",       \\\"version\\\": \\\"$fwkver\\\"     }   } }\"  &gt; \"${prog%.*}.runtimeconfig.json\" fi     fi   fi fi<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e bash-\u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u043f\u0435\u0440\u0432\u0430\u044f:  \u043c\u0438\u043d\u0438\u043c\u0430\u043b<\/h3>\n<p>\u041d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0438\u0447\u044c, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C#, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0430\u043a:<\/p>\n<pre><code class=\"cs\">{}<\/code><\/pre>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/46b\/f6e\/f70\/46bf6ef7036e62fedd86f957fcd615a0.png\" width=\"1043\" height=\"323\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/46b\/f6e\/f70\/46bf6ef7036e62fedd86f957fcd615a0.png\"\/><\/figure>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e, \u043d\u043e\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0437\u0430\u043d\u0438\u043c\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c 3.5kb \u043c\u0435\u0441\u0442\u0430\u00a0\u2014 \u0432\u0438\u0434\u0438\u043c\u043e \u0432\u00a0Microsoft \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u043d\u044f\u043b\u0438 \u0434\u0437\u0435\u043d.<\/p>\n<p><a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxAJwK4wD4G8C+Q===\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a> , <a href=\"https:\/\/nietras.com\/2021\/10\/09\/worlds-smallest-csharp-program\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0432\u0442\u043e\u0440\u0430\u044f: \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u00abread only\u00bb<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 C# \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043a\u0430\u043a \u0432 Java, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<pre><code class=\"cs\">using System; using System.Collections.Generic;  var list = new List&lt;int&gt;{1, 2, 3, 4};  IReadOnlyList&lt;int&gt; readonlyList = list;  \/\/ \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 error CS1061  \/\/ readonlyList.Add(5);  \/\/ \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ((List&lt;int&gt;)readonlyList).Add(5);  \/\/ 5 Console.WriteLine(readonlyList.Count);<\/code><\/pre>\n<p><a href=\"https:\/\/sharplab.io\/#v2:C4LgTgrgdgPgAgJgIwFgBQcAMACOSAsA3OugG4CGY2ANgJYDOw2AvNlAKYDu2AMg8AB5aUYAD4A3kgA02BDIDMM\/AF9iadAEkASu3IATAPJRqATz6MhI0djC69Ae2Nn+LGvzXoA9J+zswYeyoAYQBlJEwANiQQbABybTsjU3NBYTFY7Ad2ejZ7JgBjR2ByYWxyTPYAM2FaYFpHbErAuIBBPT1YgDpurx9bfUdk\/k62vQAKAFYASg80b2wAdUCAaxzyHPYADwAHdnzgdj10MbGUyzEp\/ocnFKmR9smZkjmfCfQ8AE4xq8HnRk6gvZoMAZkA==\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>, \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 <a href=\"https:\/\/stackoverflow.com\/questions\/49115082\/creating-an-ireadonlyliststring\/49115272#49115272\" rel=\"noopener noreferrer nofollow\">\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435<\/a> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0430 StackOverflow \u0438 \u0434\u0430\u0436\u0435 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/67e7fc48693dbaa8506d8a28\" data-style=\"\" id=\"67e7fc48693dbaa8506d8a28\" width=\"\"><\/div>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0437 \u043a\u0430\u0441\u0442\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0434\u0430\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/af5\/bf4\/28d\/af5bf428d6f1735c9f7766cd8693cb57.png\" width=\"1043\" height=\"323\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/af5\/bf4\/28d\/af5bf428d6f1735c9f7766cd8693cb57.png\"\/><\/figure>\n<p>\u041d\u043e \u0441 \u043a\u0430\u0441\u0442\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7b5\/b7f\/a27\/7b5b7fa270f622e51bc04c8bf0304697.png\" width=\"1043\" height=\"323\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b5\/b7f\/a27\/7b5b7fa270f622e51bc04c8bf0304697.png\"\/><\/figure>\n<h3>\u0414\u0438\u0447\u044c \u0442\u0440\u0435\u0442\u044c\u044f:  \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/h3>\n<p>\u041e\u0441\u0442\u0430\u0432\u043b\u044e \u0434\u043b\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0434\u043e\u0442\u043d\u0435\u0442\u0430 \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"cs\">using System; using System.IO;  Console.WriteLine(Path.DirectorySeparatorChar); \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 '\\'  var f = (in char x) =&gt; { \/* \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c 'x' \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 *\/ }; f = (ref char x) =&gt; { x = 'A'; }; \/\/ \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442!  f(Path.DirectorySeparatorChar);  Console.WriteLine(Path.DirectorySeparatorChar); \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442'A'<\/code><\/pre>\n<p><a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxAJwK4wD4AEBMBGAWACgsAGAAizwDoBJAeQG5jiqBOACgAUIEALagBEoyAKYBjBAHtkATwDKogA4RkvGQGE+qgJSNyAegPklyWAgDO5AOQAdayyIA3VeQBm5ALzkOscuO1kcgAPHS8APnIAb0MAKn8IGGsEcjApABMoN1kbYOtyPlExcljjAF9mIg9vDjEPANdQiOiQrxsAQWt9CsNjYFQU8USCotEAQkc3bl4BYTFJGQVlVXVkLV1K1jxOHn4hEQlpOUUVNSP15D1ekzMYSw7rIA\" rel=\"noopener noreferrer nofollow\">Sharplab <\/a>(\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043e\u0442\u043d\u0435\u0442\u0430), <a href=\"https:\/\/twitter.com\/controlflow\/status\/1737788743270965538\" rel=\"noopener noreferrer nofollow\">\u0442\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f: \u0443\u043f\u043e\u0440\u043e\u0442\u044b\u0439 async await<\/h3>\n<p>\u0420\u0443\u0431\u0440\u0438\u043a\u0430 \u00ab\u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u00a0\u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u00bb, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cs\">async async async(async async) =&gt;          await async;<\/code><\/pre>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 C#, \u043f\u0440\u043e\u0441\u0442\u043e <strong>\u043d\u0435\u00a0\u0432\u0435\u0441\u044c<\/strong>\u00a0\u2014 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u043a\u043e\u0439 \u0434\u0438\u0447\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044f \u0438\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cs\">class await : INotifyCompletion {     public bool IsCompleted =&gt; true;     public void GetResult() { }     public void OnCompleted(Action continuation) { } }  [AsyncMethodBuilder(typeof(builder))] class async {      public await GetAwaiter() =&gt; throw null; }  class builder {     public builder() { }     public static builder Create() =&gt; new();     public void SetResult() { }     public void SetException(Exception e) { }     public void Start&lt;TStateMachine&gt;(ref TStateMachine stateMachine)         where TStateMachine : IAsyncStateMachine =&gt; throw null;     public async Task =&gt; null;     public void AwaitOnCompleted&lt;TAwaiter, TStateMachine&gt;(         ref TAwaiter awaiter, ref TStateMachine stateMachine)         where TAwaiter : INotifyCompletion         where TStateMachine : IAsyncStateMachine =&gt; throw null;     public void AwaitUnsafeOnCompleted&lt;TAwaiter, TStateMachine&gt;(         ref TAwaiter awaiter, ref TStateMachine stateMachine)         where TAwaiter : ICriticalNotifyCompletion         where TStateMachine : IAsyncStateMachine =&gt; throw null;     public void SetStateMachine(IAsyncStateMachine stateMachine) =&gt; throw null; }<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/gist.github.com\/jaredpar\/6706628bfe0098840ce453c1c71098a9\" rel=\"noopener noreferrer nofollow\">gist<\/a> \u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, <a href=\"https:\/\/twitter.com\/jaredpar\/status\/1613615815231934468\" rel=\"noopener noreferrer nofollow\">\u0442\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 <a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxFANnAJiA1AHwAIBMAjALABQeADAAR5EB0ASgKYBmKzAxglAPYz0AomCgIA3OSq0GjAK4weYZvQDCvMAAdUzAE4BlXQDconZgGcJFGnQCsl8gGIYslCgjAO1dFDPuO5SQJaPB0uXh10agBvagBfQOoAdwALXWZouPJqbOoEvQQdWABzaKycvABmaQA2aihNFBNRal4NXQgEcOp8wpgigAp0AE8YCBFOakMIHQBKagBeAD5qZ1dLeLIE4dHxjI3K2iCpnQyAshyvEbGTS52bpZWXFEsL19zz8oAWalDOcPR+ik0t0CsUFo9XHA6gpqENweg2BAXAgZmVslE0a8emCzOCEMkfPRttdOC8crELpjXpi8AAOWjVAA8sAQywAsv05hiPm9jpNwTBmIlOWS3ngAJyTeh0\/qCxK0Wmcmai154ADs1EoKo2lJ5Cv1MrpCrmDyp5UldPWZwA9NbqAARXiw3iyagqJLJDrUACSAHIwF5eGDUqEAPwJFQxDZnQi0SUgH0AOV4PFYQzUDWYPH4pT1B2AvF4KB9ZgzGg4CGYkQeBVkzBVBzw3wA4lmWGZkZy9jSqk3qAB5GBlitV\/p0IJ\/BSwWQdPgwLmZMjRsgAbQAgmYRpw2Vnkrx0AAhWSoBE6foIIZtXisfrAY8oU8zGYAXQSRpiPbj1FbCDXiWglZniayz4jovDyqszzkMusZ3ieujkNyFz5vep5dlGn50LUcEProbqhB0zBdg8coiph3wGAg7adguOrlL2FFZoIAAepgaNmMD9CxbEcdQzC0eRILTAgjIACr5IRbIQJwBKCos\/ShKw1DiQgknSbJ6RmKplZSTJsD8Wa2RAqEykSTp6n6dQCbehuW5mcwukaQsIHJGBEFPA2vb0ngtQkR5gl\/gBg7DlmVZiYFoi6FCKlqXpcn9IZPxsMpEWAXGUVJUpMXmXFmnaQ5FmCqieoXMZ6SialeHWcmqbpuo5ZZnOiVlaZ+WOZZ1m2TAnD2e1grOdQoHgRCUF5gx1CpQAqjAvisMwwX1SO6Dhf+kU6NFvWFcw8mJYpKWrWlEoZXt2UFbl1BabFGnFW8RkhuVlUnNZKiFDwnAQCgNVQGmIUcc192tVdHU+l1PVtVtA1De5ayCZRm25f0Nmbt18NOZdOXXZDrnDZBVpkEAA==\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>.<\/p>\n<p>\u041f\u0440\u0443\u0444 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ae0\/d01\/5d0\/ae0d015d0627c169c609b2876962abcb.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae0\/d01\/5d0\/ae0d015d0627c169c609b2876962abcb.png\"\/><\/figure>\n<p>\u0415\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u043e\u0440\u043e\u0442\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<pre><code class=\"cs\">[async, async&lt;async&gt;] async async async([async&lt;async&gt;, async] (async async, async) async)         =&gt; await async.async;<\/code><\/pre>\n<p><a href=\"https:\/\/twitter.com\/Lucas_Trz\/status\/1613628484315713576\" rel=\"noopener noreferrer nofollow\">\u0422\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u043f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 <a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxFANnAJiA1AHwAIBMAjALABQeADAAR5EB0ASgK4wJRgCm9AwgPZgADqk4AnAMpiAblADGnAM4BucuQDEMZihQRgKTtXRQFu\/aooBmWgWpSIo6gG9qL12\/Ju8ADloAWagCyABQAlE4ebq54AJzUMJwA7rb2ofTeQeicAGYQWgghKmRuAL4RLmXUFQDa3nC0XgA83gB8ALr1Hek1jS113u1B3vV9XmHeIRVuALzNtLHeaV6F5qVk5uSEc9Qg1ACSAHJ87FkAnvxC+ux8MOFFUVbAfHwoewrngpec6NQz1AiizE4hU8Vjw\/gA4pwEIxFHlQk5qKsQX5qAB5GDvT7oQZEGyya7sTQQK4wMLOVarchVACCChOMFkAShAAs+OgAELMVCZURBBAnQScPhZILALkoHkhEKtDY2IbOCp4UGxSEIakJaAIMTw34IZmiPhJTTaQqUsg0hD\/KBirUAVRMAHNOEFqZbRNbmFqACr2J0IBT0anaOpBlCGgJ5KAfAxTP4AzjS2X1V1Wm0GHYp91ppxmi2pz2ce0QJ0ut0e72+qEB0Mh7ThyPRn5xwGJihyryZ8ucBpe2YZsvZxxmzZi7liciORUPcU8+Hkqe0IgANmoo4lYmoPFEnGJzrCv3iCVCwPuKMk0NhKAQc8RC7B1HPAFEAB7yQQkoIvt8k6gJhFI0973EBB7AQHtgN3AIIFkZlYE4Zogm3LJqC9CCtSgmC4OoBQQPQ6DYPiCY7kiagEmZMQDFQ3DOAwgj0z2Wl6VkNCaPwrDdX1Q04i0FATxcJVOhXA8eL42hQX8dVNXRTEoS+HtJKgLVRDqKjILY+IEMmVwkJQhSlLmMQ6h01S8Mw+JsOo2i4KIkiXDIijdI1RSNx2A4jigU4ZJJLS7PI7cUJYqzzNcxiGUC9SY1mPUDSNES7wkpyEFtGATCyThpIEaMtXQeTEsMgLLIizTiMiYy9I3GJ8uM8KzIMHC1NqmzbPs\/yvXKhxXK3RS5AgFBDmOM5MsuKBrh80i\/Momq6O2Bi6TCwrap+KLONik14ofKEprgoJdlC5iFum+rTLo\/dlpi7i1rIVYgA===\" rel=\"noopener noreferrer nofollow\">sharplab<\/a>.<\/p>\n<p>\u0422\u0443\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u00a0\u2014 \u0440\u0430\u0434\u0438 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0430\u044f\u0442\u044c \u043a\u0443\u0447\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u044d\u0442\u0443 \u0434\u0438\u0447\u044c \u043a\u043e\u0434\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u043f\u044f\u0442\u0430\u044f:  \u0432\u044b\u0437\u043e\u0432 \u0431\u0435\u0437 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 <s>\u043e\u0442\u0431\u0438\u0442\u0430\u044f<\/s> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u043f\u0441\u0438\u0445\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u043c \u043b\u044e\u0434\u044f\u043c \u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u0432 Java, \u043d\u043e \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0432\u0435\u0434\u043e\u043c\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432 \u0434\u043e\u0442\u043d\u0435\u0442\u0435:<\/p>\n<pre><code class=\"cs\">using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Reflection; using System.Runtime.Serialization;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {       Evil e = (Evil)FormatterServices.GetUninitializedObject(typeof(Evil));       e.PrintValue();         }     }          public class Evil     {         private int _value = 4;                  private Evil()          {             Console.WriteLine(\"constructed\");         }                  public void PrintValue()         {             Console.WriteLine(\"Value is {0}\", _value);         }     } }<\/code><\/pre>\n<p>\u0412\u0437\u044f\u0442\u043e <a href=\"https:\/\/rextester.com\/MNLAJ60814\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>.<\/p>\n<p>\u041f\u0440\u0443\u0444 \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/06f\/8b5\/708\/06f8b570865645ad2228732bf0c32660.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06f\/8b5\/708\/06f8b570865645ad2228732bf0c32660.png\"\/><\/figure>\n<p>\u0427\u0435\u043c \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e? <\/p>\n<p>\u0422\u0435\u043c \u0447\u0442\u043e \u0432\u044b\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u043e\u00a0\u0431\u0435\u0437 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c <strong>\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b<\/strong>.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u0431\u0438\u0442\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0440\u0443\u0447\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <strong>\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e<\/strong> \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"cs\">using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Reflection;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {   Evil e = (Evil)typeof(Evil)   .GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).Single()   .Invoke(null);         }     }          public class Evil     {         private Evil()          {             Console.WriteLine(\"constructed\");         }     } }<\/code><\/pre>\n<p><a href=\"https:\/\/rextester.com\/AWKIM88984\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>.<\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8c3\/b8e\/1dd\/8c3b8e1ddf0569343c62a3e6dfa314e0.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c3\/b8e\/1dd\/8c3b8e1ddf0569343c62a3e6dfa314e0.png\"\/><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430\u00a0\u2014 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b, \u043a\u0430\u043a \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c, \u043d\u0435\u00a0\u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043d\u0430\u0440\u0443\u0436\u0438.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0448\u0435\u0441\u0442\u0430\u044f: \u0443\u0433\u0430\u0440 \u043f\u043e \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438<\/h3>\n<p>\u041a\u043e\u0434 C# \u043d\u0438\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0438\u00a0\u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0438\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u00ab\/unsafe\u00bb:<\/p>\n<pre><code class=\"cs\">using System; unsafe class Program {     delegate void bar(int* i);     static Index \u019b(bar \u03b2) =&gt; default;     static void Main(string[] args)     {         int[] \u03c9 = { };         int \u01a9 = 42;         int? \u03a6 = 10;         var \u03fc = \u03c9;          \u03fc=\u03c9[\u019b(\u03b2:\u0394=&gt;\u03a6??=\u03c9[^++\u01a9]\/\u01a9|*&amp;\u0394[-0%\u01a9]&gt;&gt;1^\u03a6??0!&amp;~(\u03b4:\u01a9,^\u03a6..).\u03b4)..(1_0&gt;.0?\u01a9:0b1)];     } }<\/code><\/pre>\n<p><a href=\"https:\/\/twitter.com\/leppie\/status\/1492256050774487047\" rel=\"noopener noreferrer nofollow\">\u0422\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430, <a href=\"https:\/\/sharplab.io\/#v2:D4AQTAjAsAUArgOwM4EMBmBTABOHEDssA3rFmVgCYYA2GA5igC7YgAsWARigE4AUAlgkYAqLPwCUAblLkQEAGxYAkgioAPLIGzAXl25ZATcDisAXgB8lDGhRxqjaTHJ5FbLAFkUg3nIAMAbQC6WDx0SOIyZCQOjuSCjAFYgJPAJlhEWAC+9tExQliAlYDJrGCZWWJCAPxYgGXAyRDexVkAbjxYgD\/AyQn10eHRLcYJvtr6AFyAKcBmlWVlfb4AegDUc7n+APS5wMIAZCO+ALTeAKRLpqYQMxNl3gCEGwB+vIAtwEO5ADRnAHRv4m\/3X2+8EAB9bymN7eMq5IbeDgQcT+TppWBpIA\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>.<\/p>\n<p>\u041a\u00a0\u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u00a0\u0441\u0442\u043e\u043b\u044c <s>\u0443\u043f\u043e\u0440\u043e\u0442\u043e\u043c<\/s> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u043a\u043e\u0434\u0435\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0443\u0444:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/393\/7ac\/2e4\/3937ac2e43834b3ab09e4f169f34a668.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/393\/7ac\/2e4\/3937ac2e43834b3ab09e4f169f34a668.png\"\/><\/figure>\n<h3>\u0414\u0438\u0447\u044c \u0441\u0435\u0434\u044c\u043c\u0430\u044f:  \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f \u0431\u0435\u0437 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438<\/h3>\n<p>\u0426\u0438\u0442\u0438\u0440\u0443\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<blockquote>\n<p>How about changing private fields without unsafe or reflection? I bet you thought C# was type safe. Nothing is truly black and white.<\/p>\n<\/blockquote>\n<p>\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d \u00ab\u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u043b\u00bb \u0438 \u0434\u043e\u0441\u0442\u0438\u0433 \u043f\u0440\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cs\">using System.Reflection; using System.Runtime.InteropServices; using System;  public class Alpha {     public int A;     private int B;      public Alpha()     {         this.A = 1337;         this.B = 42;     }      public void PrintB()     {         Console.WriteLine(\"My private field B is \" + this.B);     } }  public class Bravo {     public int A;     public int B; }  [StructLayout(LayoutKind.Explicit, Pack = 1)] public struct Union {     [FieldOffset(0)] public Alpha AsAlpha;     [FieldOffset(0)] public Bravo AsBravo; }  internal class Program {     static void Main(string[] args)     {         Alpha alpha = new Alpha();          \/\/ \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 42.         alpha.PrintB();          \/\/ Re-interpret as Bravo and change B to 1234.         Union union = new Union();         union.AsAlpha = alpha;         union.AsBravo.B = 1234;          \/\/ \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 1234.         alpha.PrintB();     } }<\/code><\/pre>\n<p><a href=\"https:\/\/www.reddit.com\/r\/csharp\/comments\/185wmvi\/comment\/kbosoxl\/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button\" rel=\"noopener noreferrer nofollow\">Reddit<\/a>.<\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c5\/714\/661\/0c57146611a2fd0e29e660d7cb379525.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c5\/714\/661\/0c57146611a2fd0e29e660d7cb379525.png\"\/><\/figure>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 <strong>\u0431\u0435\u0437<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0430\u043b\u044c\u043d\u043e\u0433\u043e API \u0434\u043b\u044f \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438\u00a0\u2014 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u043a\u043e\u0434\u0430 \u0438 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043e\u0432.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0432\u043e\u0441\u044c\u043c\u0430\u044f: \u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0442\u0435\u043b\u0430 \u0441\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u043c<\/h3>\n<p>\u041a\u043e\u0434, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0435\u0440\u0446\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435:<\/p>\n<pre><code class=\"cs\">using System;  \/\/ \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435? String s = 42;  \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 13 Console.WriteLine(s);   class String {     public override string ToString() =&gt; \"13\";     public static implicit operator String(int i) =&gt; new(); }<\/code><\/pre>\n<p><a href=\"https:\/\/www.reddit.com\/r\/csharp\/comments\/185wmvi\/comment\/kb75cpo\/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a> \u043d\u0430 Reddit, <a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxAJwK7wCYgNQB8ACATAIwCwAUBQMoLKwDmABAM6MC8jALIQNwUUB6AYwAKdGAlbEAzBXzEAnAApmASh6N+5IoxrimAbwqMTjfNMYB7AG4BTZHQy2zxAAyMAKpb0Mlq9gB8jABEMsF85KZmFvIAbIxQYAAOADZQAMZQCFZJ9hAIlsi6tL6w2VD+bEEwtgDufhEAvkA\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/a> \u043d\u0430 Sharplab \u0438 <a href=\"https:\/\/blog.paranoidcoding.org\/2019\/04\/08\/string-vs-String-is-not-about-style.html\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c.<\/p>\n<p>\u0421\u0435\u0439 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u00a0\u2014 \u044f\u0440\u043a\u0430\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 \u043a\u043e\u0434\u0430 \u0432\u044b\u0431\u0435\u0441\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430:<\/p>\n<blockquote>\n<p>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0430 String \u043d\u0438\u0436\u0435 <strong>\u043d\u0435\u0442<\/strong>, \u0430\u00a0\u0432\u0430\u043c \u0437\u0430\u0434\u0430\u044e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0438\u043b\u0438 \u043d\u0435\u0442\u00bb<\/p>\n<\/blockquote>\n<h3>\u0414\u0438\u0447\u044c \u0434\u0435\u0432\u044f\u0442\u0430\u044f: \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 &#171;\u043f\u043e \u043f\u0430\u0446\u0430\u043d\u0441\u043a\u0438&#187;<\/h3>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <s>\u0432 \u0433\u043b\u0430\u0437\u0430<\/s> \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cs\">using System; float x = 0.4f; float y = 0.6f; Console.WriteLine((double)x + (double)y == 1); \/\/ False Console.WriteLine((float)((double)x + (double)y) == 1); \/\/ True<\/code><\/pre>\n<p><a href=\"https:\/\/twitter.com\/khyperia\/status\/1730232117831815322\" rel=\"noopener noreferrer nofollow\">\u0422\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430, <a href=\"https:\/\/mas.to\/@khyperia\/111500086973840518\" rel=\"noopener noreferrer nofollow\">\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435<\/a> \u0438 \u0442\u0435\u0441\u0442 \u043d\u0430 <a href=\"https:\/\/sharplab.io\/#v2:C4LgTgrgdgPgAgJgIwFgBQAzANgewIbAAEAHoQLyEAMAdACwYDc62+RAnuVdQGyPpxIAnAAphAExwQARlgCmASlIBqQuMkyFHMhSTymaASOEsC80ROlzFhFWsub55HXqA\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>.<\/p>\n<p>\u041a\u0430\u043a\u00a0\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438\u0437\u043b\u0438\u0448\u043d\u0438, \u043e\u0442\u043c\u0435\u0447\u0443\u00a0\u043b\u0438\u0448\u044c \u0447\u0442\u043e\u00a0\u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u00a0\u0442\u0438\u043f\u0430\u043c\u0438 double \u0438 float \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u0433\u0435\u0439\u043c\u0434\u0435\u0432\u0435 \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c <strong>\u043d\u0435\u0434\u0435\u043b\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/strong> \u00ab\u0432 \u043c\u044b\u043b\u0435 \u0438 \u0441\u00a0\u043a\u0440\u0430\u0441\u043d\u044b\u043c\u0438 \u0433\u043b\u0430\u0437\u0430\u043c\u0438\u00bb.<\/p>\n<p>\u041f\u0440\u0443\u0444:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f2\/540\/45d\/8f254045d17c430c5da7534b9fa11bda.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f2\/540\/45d\/8f254045d17c430c5da7534b9fa11bda.png\"\/><\/figure>\n<h3>\u0414\u0438\u0447\u044c \u0434\u0435\u0441\u044f\u0442\u0430\u044f: \u0432 \u0441\u0442\u0438\u0445\u0430\u0445!<\/h3>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C#:<\/p>\n<pre><code class=\"cs\">var x = i is null or not null or add  or and and alias or ascending and args  or async and await or by and descending  or dynamic and equals or from and get  or global and group or init and into  or join and let or managed and nameof  or nint or notnull and nuint or on and  or or orderby and  record and remove  or select and set or unmanaged  and value or var and when or where and with or yield;      Console.WriteLine(x);<\/code><\/pre>\n<p><a href=\"https:\/\/x.com\/jaredpar\/status\/1529551649768886272\" rel=\"noopener noreferrer nofollow\">\u0422\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 <a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxAJwK7wCYgNQB8ACATAAwCwAUEQIwUX4AsABACoAWUAzgJIcCiAblAA2ACgCUFAN4VGsxgGMA9jA4JGsNRAwYAvI2IBuGXKUq1GxhBi79R8nIXLV6mJqFQIHPYeOzTzi095AFNrWABzbzsHf3NXS2Rwr1tfRzMXNXwADijU2IzGfABOXPsTJzi1YABPUpiKgoxgjhCwmEiUsr8GiwxqmAgwKHk68vSLYIBHVAghZJ8utID4gDNkRTBR7vH48OCELaXKxnChRWBZw\/yLcPXUAAcrnvjYKAPO+p3KxSevxgArRSwX7LNRCfYg46QAZ7GwLT6gxgDMDBRQrSEFGAaDEWGCKd7wsaIvEIGCoIRCHHxMnYj5E47KKlqRTIJmMFlNZA1Nn3CDIBAeSl07aI5DBJTIOHRekFMVgRT8YJsjjBcHyAnSkXHFUavLPNToaEQWGMNn8WaoJXCo4Fc2s63XeIAd1YoTZLuCYvdb1YbPwVCopVSGgA\/OpTda7YwAB4RqDqDhI8lCdnIJH4pMU1OWbTZqwYSzWSzuTx5lqhDARQsFvlJbPZauFIrZmqNprltrhbN9ZHDRtTGZzbNrDaNvbMtOnc6zMd3e7Z16aIsaRTZwGwRvgieMI0m\/NIwaolbZrHxFnp0nJxs0s9p5SN8+PyWe1v7xhiiU1otyhXBbMqtUlwLHVs0NKxjWCAtG3NIRLWzKN9w9GBsw9MVGydH16wDTVCioIoRAAImjHQCMYbBozEOwAF8KCAA===\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a> \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0442\u0443\u0442 \u0441\u043d\u043e\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 (\u0441\u043c.\u00a0\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u00a0Sharplab), \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<blockquote>\n<p>\u041d\u043e \u043a\u0430\u043a \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c!<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0443\u0444:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c10\/778\/d61\/c10778d6175575aca8053a39ad57d792.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c10\/778\/d61\/c10778d6175575aca8053a39ad57d792.png\"\/><\/figure>\n<h3>\u0415\u0449\u0435<\/h3>\n<p>\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0438\u043b \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0434\u0438\u0447\u044c \u0432 \u0434\u043e\u0442\u043d\u0435\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438\u0436\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443.<\/p>\n<p>1. \u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/dev.to\/adventures_in_dotnet\/net-052-abusing-c-calendars-epochs-and-the-net-functions-framework-with-jon-skeet\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> \u00ab.NET 052: Abusing C#, Calendars, Epochs and the .NET Functions Framework with Jon Skeet\u00bb \u0441\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c <a href=\"https:\/\/github.com\/jskeet\/DemoCode\/tree\/main\/Abusing%20CSharp\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c<\/a> \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0438\u0447\u0438.<\/p>\n<p>2. <a href=\"https:\/\/gist.github.com\/jbrestan\/8143fe86c2bac1035620\" rel=\"noopener noreferrer nofollow\">Gist<\/a> \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043d\u0430\u0441\u0438\u043b\u0438\u044f (abuse) \u043d\u0430\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438:<\/p>\n<pre><code class=\"cs\">[TestClass] public class OperatorAbuseTest {     [TestMethod]     public void TestTheAbuse()     {         var repeat = Operators.Repeat&lt;string&gt;();         var join = Operators.Join&lt;string&gt;();         var result = \"Hello\" &lt;repeat&gt; 3 &lt;join&gt; \",\";         var expected = \"Hello,Hello,Hello\";         Assert.AreEqual(expected, result);     } }  public static class Operators {     public static Operator&lt;T, int, IEnumerable&lt;T&gt;&gt; Repeat&lt;T&gt;()     {         return new Operator&lt;T, int, IEnumerable&lt;T&gt;&gt;(Enumerable.Repeat);     }      public static Operator&lt;IEnumerable&lt;T&gt;, string, string&gt; Join&lt;T&gt;()     {         return new Operator&lt;IEnumerable&lt;T&gt;, string, string&gt;((values, separator) =&gt; string.Join(separator, values));     } }  public class Operator&lt;TLeft, TRight, TResult&gt; {     private readonly Func&lt;TLeft, TRight, TResult&gt; func;      public Operator(Func&lt;TLeft, TRight, TResult&gt; func)     {         this.func = func;     }      public static PartialOperator&lt;TLeft, TRight, TResult&gt; operator &lt;(TLeft lhs, Operator&lt;TLeft, TRight, TResult&gt; op)     {         return new PartialOperator&lt;TLeft, TRight, TResult&gt;(lhs, op.func);     }      public static PartialOperator&lt;TLeft, TRight, TResult&gt; operator &gt;(TLeft lhs, Operator&lt;TLeft, TRight, TResult&gt; op)     {         return new PartialOperator&lt;TLeft, TRight, TResult&gt;(lhs, op.func);     } }  public class PartialOperator&lt;TLeft, TRight, TResult&gt; {     private readonly Func&lt;TLeft, TRight, TResult&gt; func;     private readonly TLeft left;      internal PartialOperator(TLeft left, Func&lt;TLeft, TRight, TResult&gt; func)     {         this.left = left;         this.func = func;     }      public static TResult operator &gt;(PartialOperator&lt;TLeft, TRight, TResult&gt; op, TRight rhs)     {         return op.func(op.left, rhs);     }      public static TResult operator &lt;(PartialOperator&lt;TLeft, TRight, TResult&gt; op, TRight rhs)     {         return op.func(op.left, rhs);     } }<\/code><\/pre>\n<p>3. <a href=\"https:\/\/www.reddit.com\/r\/csharp\/comments\/185wmvi\/whats_the_most_insane_thing_you_can_do_in_c\/\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435<\/a> \u043d\u0430 Reddit, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0435 \u0441\u0430\u043c\u043e\u0439 \u043e\u0442\u0431\u0438\u0442\u043e\u0439 \u0434\u0438\u0447\u0438 \u043d\u0430 C#: <\/p>\n<blockquote>\n<p>What&#8217;s the most insane thing you can do in C#?<\/p>\n<\/blockquote>\n<p>4. <a href=\"https:\/\/stackoverflow.com\/questions\/7299097\/dynamically-replace-the-contents-of-a-c-sharp-method\/55026523#55026523\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435<\/a> \u043d\u0430 StackOverflow, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 \u0421#: <\/p>\n<blockquote>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/7299097\/dynamically-replace-the-contents-of-a-c-sharp-method\" rel=\"noopener noreferrer nofollow\">Dynamically replace the contents of a C# method?<\/a><\/p>\n<\/blockquote>\n<p>5. \u0415\u0449\u0435 \u043e\u0434\u0438\u043d <a href=\"https:\/\/gist.github.com\/Windows10CE\/ac54184f87c05049208fdb8658fd27a9\" rel=\"noopener noreferrer nofollow\">Gist<\/a> \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 stdin\/stdout \u0432 \u0441\u0442\u0438\u043b\u0435 C++: <\/p>\n<pre><code class=\"cs\">using System; using System.Reflection; using System.Diagnostics;  int a = default; string s = default; _ = Std.In &gt;&gt; __makeref(a) &gt;&gt; __makeref(s); _ = Std.Out &lt;&lt; a &lt;&lt; s &lt;&lt; \"\\n\";  public static unsafe class Std {     public sealed class OutImpl     {         public static OutImpl Singleton { get; } = new();                  private OutImpl() { }                  public static OutImpl operator &lt;&lt;(OutImpl self, object o)         {             if (object.ReferenceEquals(o, EndL)) o = \"\\n\";             Console.WriteLine(o);             return self;         }     }      public sealed class InImpl     {         public static InImpl Singleton { get; } = new();                  private InImpl() { }                  private static readonly MethodInfo _parseMethod = typeof(InImpl).GetMethod(nameof(SetToParsed), BindingFlags.Static | BindingFlags.NonPublic)!;          public static InImpl operator &gt;&gt;(InImpl self, TypedReference t)         {             var line = Console.ReadLine() ?? throw new UnreachableException();             Type type = __reftype(t);             if (type.IsAssignableTo(typeof(IParsable&lt;&gt;).MakeGenericType(type)))             {                 _parseMethod.MakeGenericMethod(type).Invoke(null, [Pointer.Box(&amp;t, typeof(TypedReference*)), line]);                 return self;             }             throw new NotSupportedException();         }          private static void SetToParsed&lt;T&gt;(TypedReference* t, string toParse) where T : IParsable&lt;T&gt;         {             __refvalue(*t, T) = T.Parse(toParse, null);         }     }          public static OutImpl Out =&gt; OutImpl.Singleton;     public static object EndL { get; } = new();     public static InImpl In =&gt; InImpl.Singleton; }<\/code><\/pre>\n<p>6. <a href=\"https:\/\/github.com\/nikouu\/Fun-Weird-Nasty-CSharp?tab=readme-ov-file\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0431\u043e\u0440\u043a\u0430 \u0434\u0438\u0447\u0438<\/a> \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 Github, \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u044b\u043b\u0430 \u0432\u0437\u044f\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430.<\/p>\n<p>7. <a href=\"https:\/\/www.nikouusitalo.com\/blog\/the-weird-things-roslyn-gets-up-to\/\" rel=\"noopener noreferrer nofollow\">\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0430<\/a>, \u043d\u043e \u0443\u0436\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438.<\/p>\n<h2>\u042d\u043f\u0438\u043b\u043e\u0433<\/h2>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b <s>\u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0442 \u0432\u0430\u0448 \u0441\u043e\u043d \u0438 \u043f\u043e\u043a\u043e\u0439<\/s> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438.NET \u0438 \u0434\u0443\u0440\u043d\u044b\u0435 \u043c\u044b\u0441\u043b\u0438 \u043f\u0440\u043e\u00a0\u043d\u0435\u043a\u0438\u0435 \u00ab\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c\u00bb \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0430\u0441 \u043f\u043e\u043a\u0438\u043d\u0443\u0442.<\/p>\n<blockquote>\n<p>\u0417\u043d\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0441\u0442\u0440\u0430\u0445. (\u0446) Futurama<\/p>\n<\/blockquote>\n<p>\u0410\u00a0\u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0432\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0431\u043b\u0430\u0433\u043e \u0447\u0442\u043e\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u00a0\u2014 \u043f\u043e\u0432\u043e\u0434 \u043a\u00a0\u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0443\u0432\u043e\u043b\u044c\u043d\u0435\u043d\u0438\u044e.<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0432\u0435\u0441\u0435\u043b\u044b\u0439 <a href=\"https:\/\/blog.0x08.ru\/mad-dotnet\" rel=\"noopener noreferrer nofollow\">\u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b<\/a> \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/895588\/\"> https:\/\/habr.com\/ru\/articles\/895588\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <a href=\"https:\/\/habr.com\/ru\/articles\/886080\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0448\u043b\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043f\u0440\u043e \u00ab\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0443\u044e\u00bb Java \u0432\u044b\u0437\u0432\u0430\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0421# \u0441\u00a0\u0442\u0435\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438\u00a0\u2014 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0448\u0430\u0442\u0430\u0435\u043c .NET!<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0412\u0432\u043e\u0434\u043d\u0430\u044f<\/h3>\n<p>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 <a href=\"https:\/\/dotnet.microsoft.com\" rel=\"noopener noreferrer nofollow\">.NET<\/a> \u0438\u00a0\u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043b\u044f \u043d\u0435\u0435 C#, \u043a\u0430\u043a \u0438\u00a0Java, \u0438\u043c\u0435\u044e\u0442 \u0447\u0435\u0442\u043a\u0443\u044e \u0438\u00a0\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0443\u044e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0441\u0430\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u043f\u0440\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0438 \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0438 Microsoft, \u0442\u0430\u043a \u0438\u00a0\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u041a\u0430\u043a \u0438\u00a0Java\u00a0\u2014 .NET \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u0430\u043a \u0438\u00a0Java\u00a0\u2014 C# \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f <strong>\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c<\/strong>.<\/p>\n<blockquote>\n<p>\u0425\u043e\u0442\u044f \u044f\u00a0\u0434\u043e\u00a0\u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u044e\u00a0\u2014 \u043a\u0430\u043a \u0438\u00a0\u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u0435\u043d \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 <em>\u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/em>. <\/p>\n<\/blockquote>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u043c\u0438\u0440\u0435 Java, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 .NET \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u044f\u0442 \u0442\u0440\u044e\u043a\u0438 \u0438 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0438\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u0441\u0442\u0430\u043d\u0443\u0442 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u043c \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430.<\/p>\n<h3>\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0440\u0435\u0434\u0430<\/h3>\n<p>\u0420\u0430\u0434\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043d\u0430\u043a\u0430\u043b\u0430 \u0440\u0430\u0434\u043e\u0441\u0442\u0438 \u0438 \u0432\u0435\u0441\u0435\u043b\u044c\u044f, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0431\u044b\u043b\u0430 \u0432\u0437\u044f\u0442 <a href=\"https:\/\/dotnet.microsoft.com\/en-us\/download\" rel=\"noopener noreferrer nofollow\">.NET Core 9 \u0434\u043b\u044f Linux<\/a>. \u0417\u0430\u043e\u0434\u043d\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u043f\u0440\u0438\u0447\u0438\u0442\u0430\u043d\u0438\u0439, <s>\u043e\u0442\u043c\u0430\u0437\u043e\u043a \u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043e\u043a<\/s> \u043f\u0440\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Windows \u0438 \u0442\u044f\u0436\u0435\u043b\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e\u0435.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0432 Linux-\u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0442\u043d\u0435\u0442\u0430 \u0437\u0430\u0447\u0435\u043c-\u0442\u043e <a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/12713\" rel=\"noopener noreferrer nofollow\">\u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443<\/a> \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 .cs \u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<blockquote>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u0430\u00a0\u2014 \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/km-hussain-in\/CourseSamples\/tree\/main\/CSharp\" rel=\"noopener noreferrer nofollow\">\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 bash-\u0441\u043a\u0440\u0438\u043f\u0442<\/a>, \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0432 \u0440\u0443\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  #dotnethome=`dirname \"$0\"` dotnethome=`dirname \\`which dotnet\\`` sdkver=$(dotnet --version) fwkver=$(dotnet --list-runtimes | grep Microsoft.NETCore.App | awk '{printf(\"%s\", $2)}') tfm=\"net${fwkver%.*}\" dotnetlib=$dotnethome\/packs\/Microsoft.NETCore.App.Ref\/$fwkver\/ref\/$tfm  if [ \"$#\" -lt 1 ]; then dotnet $dotnethome\/sdk\/$sdkver\/Roslyn\/bincore\/csc.dll -help exit 1 fi if ! test -f \"csc-$fwkver.rsp\"; then   for f in  $dotnetlib\/*.dll; do echo -r:$(basename $f) &gt;&gt; \/tmp\/csc-$fwkver.rsp   done fi  for arg in \"$@\" do if [[ \"$arg\" == *\"out:\"* ]]; then   prog=\"${arg:5}\"   break fi if [[ \"$arg\" == *\".cs\" ]]; then   prog=\"${arg%.*}.dll\" fi   done dotnet $dotnethome\/sdk\/$sdkver\/Roslyn\/bincore\/csc.dll -nologo -out:\"$prog\" -lib:\"$dotnetlib\" @\/tmp\/csc-$fwkver.rsp $*  if [ $? -eq 0 ]; then   if test -f \"$prog\"; then     if [[ \"$*\" != *\"t:library\"* ]] &amp;&amp; [[ \"$*\" != *\"target:library\"* ]]; then if ! test -f \"${prog%.*}.runtime.config\"; then echo \"{   \\\"runtimeOptions\\\": {     \\\"framework\\\": {       \\\"name\\\": \\\"Microsoft.NETCore.App\\\",       \\\"version\\\": \\\"$fwkver\\\"     }   } }\"  &gt; \"${prog%.*}.runtimeconfig.json\" fi     fi   fi fi<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0441\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e bash-\u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u043f\u0435\u0440\u0432\u0430\u044f:  \u043c\u0438\u043d\u0438\u043c\u0430\u043b<\/h3>\n<p>\u041d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0438\u0447\u044c, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C#, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c.<\/p>\n<p>\u0422\u0430\u043a:<\/p>\n<pre><code class=\"cs\">{}<\/code><\/pre>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e, \u043d\u043e\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0437\u0430\u043d\u0438\u043c\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c 3.5kb \u043c\u0435\u0441\u0442\u0430\u00a0\u2014 \u0432\u0438\u0434\u0438\u043c\u043e \u0432\u00a0Microsoft \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u043d\u044f\u043b\u0438 \u0434\u0437\u0435\u043d.<\/p>\n<p><a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxAJwK4wD4G8C+Q===\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a> , <a href=\"https:\/\/nietras.com\/2021\/10\/09\/worlds-smallest-csharp-program\/\" rel=\"noopener noreferrer nofollow\">\u0442\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0432\u0442\u043e\u0440\u0430\u044f: \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u00abread only\u00bb<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 C# \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043d\u0430 \u043a\u0430\u043a \u0432 Java, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<pre><code class=\"cs\">using System; using System.Collections.Generic;  var list = new List&lt;int&gt;{1, 2, 3, 4};  IReadOnlyList&lt;int&gt; readonlyList = list;  \/\/ \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 error CS1061  \/\/ readonlyList.Add(5);  \/\/ \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ((List&lt;int&gt;)readonlyList).Add(5);  \/\/ 5 Console.WriteLine(readonlyList.Count);<\/code><\/pre>\n<p><a href=\"https:\/\/sharplab.io\/#v2:C4LgTgrgdgPgAgJgIwFgBQcAMACOSAsA3OugG4CGY2ANgJYDOw2AvNlAKYDu2AMg8AB5aUYAD4A3kgA02BDIDMM\/AF9iadAEkASu3IATAPJRqATz6MhI0djC69Ae2Nn+LGvzXoA9J+zswYeyoAYQBlJEwANiQQbABybTsjU3NBYTFY7Ad2ejZ7JgBjR2ByYWxyTPYAM2FaYFpHbErAuIBBPT1YgDpurx9bfUdk\/k62vQAKAFYASg80b2wAdUCAaxzyHPYADwAHdnzgdj10MbGUyzEp\/ocnFKmR9smZkjmfCfQ8AE4xq8HnRk6gvZoMAZkA==\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>, \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 <a href=\"https:\/\/stackoverflow.com\/questions\/49115082\/creating-an-ireadonlyliststring\/49115272#49115272\" rel=\"noopener noreferrer nofollow\">\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435<\/a> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0430 StackOverflow \u0438 \u0434\u0430\u0436\u0435 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/67e7fc48693dbaa8506d8a28\" data-style=\"\" id=\"67e7fc48693dbaa8506d8a28\" width=\"\"><\/div>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0435\u0437 \u043a\u0430\u0441\u0442\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0434\u0430\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u043e \u0441 \u043a\u0430\u0441\u0442\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0414\u0438\u0447\u044c \u0442\u0440\u0435\u0442\u044c\u044f:  \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/h3>\n<p>\u041e\u0441\u0442\u0430\u0432\u043b\u044e \u0434\u043b\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0434\u043e\u0442\u043d\u0435\u0442\u0430 \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"cs\">using System; using System.IO;  Console.WriteLine(Path.DirectorySeparatorChar); \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 '\\'  var f = (in char x) =&gt; { \/* \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c 'x' \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 *\/ }; f = (ref char x) =&gt; { x = 'A'; }; \/\/ \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442!  f(Path.DirectorySeparatorChar);  Console.WriteLine(Path.DirectorySeparatorChar); \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442'A'<\/code><\/pre>\n<p><a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxAJwK4wD4AEBMBGAWACgsAGAAizwDoBJAeQG5jiqBOACgAUIEALagBEoyAKYBjBAHtkATwDKogA4RkvGQGE+qgJSNyAegPklyWAgDO5AOQAdayyIA3VeQBm5ALzkOscuO1kcgAPHS8APnIAb0MAKn8IGGsEcjApABMoN1kbYOtyPlExcljjAF9mIg9vDjEPANdQiOiQrxsAQWt9CsNjYFQU8USCotEAQkc3bl4BYTFJGQVlVXVkLV1K1jxOHn4hEQlpOUUVNSP15D1ekzMYSw7rIA\" rel=\"noopener noreferrer nofollow\">Sharplab <\/a>(\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043e\u0442\u043d\u0435\u0442\u0430), <a href=\"https:\/\/twitter.com\/controlflow\/status\/1737788743270965538\" rel=\"noopener noreferrer nofollow\">\u0442\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f: \u0443\u043f\u043e\u0440\u043e\u0442\u044b\u0439 async await<\/h3>\n<p>\u0420\u0443\u0431\u0440\u0438\u043a\u0430 \u00ab\u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u00a0\u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u00bb, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cs\">async async async(async async) =&gt;          await async;<\/code><\/pre>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 C#, \u043f\u0440\u043e\u0441\u0442\u043e <strong>\u043d\u0435\u00a0\u0432\u0435\u0441\u044c<\/strong>\u00a0\u2014 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u043a\u043e\u0439 \u0434\u0438\u0447\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044f \u0438\u0437 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cs\">class await : INotifyCompletion {     public bool IsCompleted =&gt; true;     public void GetResult() { }     public void OnCompleted(Action continuation) { } }  [AsyncMethodBuilder(typeof(builder))] class async {      public await GetAwaiter() =&gt; throw null; }  class builder {     public builder() { }     public static builder Create() =&gt; new();     public void SetResult() { }     public void SetException(Exception e) { }     public void Start&lt;TStateMachine&gt;(ref TStateMachine stateMachine)         where TStateMachine : IAsyncStateMachine =&gt; throw null;     public async Task =&gt; null;     public void AwaitOnCompleted&lt;TAwaiter, TStateMachine&gt;(         ref TAwaiter awaiter, ref TStateMachine stateMachine)         where TAwaiter : INotifyCompletion         where TStateMachine : IAsyncStateMachine =&gt; throw null;     public void AwaitUnsafeOnCompleted&lt;TAwaiter, TStateMachine&gt;(         ref TAwaiter awaiter, ref TStateMachine stateMachine)         where TAwaiter : ICriticalNotifyCompletion         where TStateMachine : IAsyncStateMachine =&gt; throw null;     public void SetStateMachine(IAsyncStateMachine stateMachine) =&gt; throw null; }<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/gist.github.com\/jaredpar\/6706628bfe0098840ce453c1c71098a9\" rel=\"noopener noreferrer nofollow\">gist<\/a> \u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, <a href=\"https:\/\/twitter.com\/jaredpar\/status\/1613615815231934468\" rel=\"noopener noreferrer nofollow\">\u0442\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 <a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxFANnAJiA1AHwAIBMAjALABQeADAAR5EB0ASgKYBmKzAxglAPYz0AomCgIA3OSq0GjAK4weYZvQDCvMAAdUzAE4BlXQDconZgGcJFGnQCsl8gGIYslCgjAO1dFDPuO5SQJaPB0uXh10agBvagBfQOoAdwALXWZouPJqbOoEvQQdWABzaKycvABmaQA2aihNFBNRal4NXQgEcOp8wpgigAp0AE8YCBFOakMIHQBKagBeAD5qZ1dLeLIE4dHxjI3K2iCpnQyAshyvEbGTS52bpZWXFEsL19zz8oAWalDOcPR+ik0t0CsUFo9XHA6gpqENweg2BAXAgZmVslE0a8emCzOCEMkfPRttdOC8crELpjXpi8AAOWjVAA8sAQywAsv05hiPm9jpNwTBmIlOWS3ngAJyTeh0\/qCxK0Wmcmai154ADs1EoKo2lJ5Cv1MrpCrmDyp5UldPWZwA9NbqAARXiw3iyagqJLJDrUACSAHIwF5eGDUqEAPwJFQxDZnQi0SUgH0AOV4PFYQzUDWYPH4pT1B2AvF4KB9ZgzGg4CGYkQeBVkzBVBzw3wA4lmWGZkZy9jSqk3qAB5GBlitV\/p0IJ\/BSwWQdPgwLmZMjRsgAbQAgmYRpw2Vnkrx0AAhWSoBE6foIIZtXisfrAY8oU8zGYAXQSRpiPbj1FbCDXiWglZniayz4jovDyqszzkMusZ3ieujkNyFz5vep5dlGn50LUcEProbqhB0zBdg8coiph3wGAg7adguOrlL2FFZoIAAepgaNmMD9CxbEcdQzC0eRILTAgjIACr5IRbIQJwBKCos\/ShKw1DiQgknSbJ6RmKplZSTJsD8Wa2RAqEykSTp6n6dQCbehuW5mcwukaQsIHJGBEFPA2vb0ngtQkR5gl\/gBg7DlmVZiYFoi6FCKlqXpcn9IZPxsMpEWAXGUVJUpMXmXFmnaQ5FmCqieoXMZ6SialeHWcmqbpuo5ZZnOiVlaZ+WOZZ1m2TAnD2e1grOdQoHgRCUF5gx1CpQAqjAvisMwwX1SO6Dhf+kU6NFvWFcw8mJYpKWrWlEoZXt2UFbl1BabFGnFW8RkhuVlUnNZKiFDwnAQCgNVQGmIUcc192tVdHU+l1PVtVtA1De5ayCZRm25f0Nmbt18NOZdOXXZDrnDZBVpkEAA==\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>.<\/p>\n<p>\u041f\u0440\u0443\u0444 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0415\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u043e\u0440\u043e\u0442\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:<\/p>\n<pre><code class=\"cs\">[async, async&lt;async&gt;] async async async([async&lt;async&gt;, async] (async async, async) async)         =&gt; await async.async;<\/code><\/pre>\n<p><a href=\"https:\/\/twitter.com\/Lucas_Trz\/status\/1613628484315713576\" rel=\"noopener noreferrer nofollow\">\u0422\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u043f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 <a href=\"https:\/\/sharplab.io\/#v2:EYLgtghglgdgNAFxFANnAJiA1AHwAIBMAjALABQeADAAR5EB0ASgK4wJRgCm9AwgPZgADqk4AnAMpiAblADGnAM4BucuQDEMZihQRgKTtXRQFu\/aooBmWgWpSIo6gG9qL12\/Ju8ADloAWagCyABQAlE4ebq54AJzUMJwA7rb2ofTeQeicAGYQWgghKmRuAL4RLmXUFQDa3nC0XgA83gB8ALr1Hek1jS113u1B3vV9XmHeIRVuALzNtLHeaV6F5qVk5uSEc9Qg1ACSAHJ87FkAnvxC+ux8MOFFUVbAfHwoewrngpec6NQz1AiizE4hU8Vjw\/gA4pwEIxFHlQk5qKsQX5qAB5GDvT7oQZEGyya7sTQQK4wMLOVarchVACCChOMFkAShAAs+OgAELMVCZURBBAnQScPhZILALkoHkhEKtDY2IbOCp4UGxSEIakJaAIMTw34IZmiPhJTTaQqUsg0hD\/KBirUAVRMAHNOEFqZbRNbmFqACr2J0IBT0anaOpBlCGgJ5KAfAxTP4AzjS2X1V1Wm0GHYp91ppxmi2pz2ce0QJ0ut0e72+qEB0Mh7ThyPRn5xwGJihyryZ8ucBpe2YZsvZxxmzZi7liciORUPcU8+Hkqe0IgANmoo4lYmoPFEnGJzrCv3iCVCwPuKMk0NhKAQc8RC7B1HPAFEAB7yQQkoIvt8k6gJhFI0973EBB7AQHtgN3AIIFkZlYE4Zogm3LJqC9CCtSgmC4OoBQQPQ6DYPiCY7kiagEmZMQDFQ3DOAwgj0z2Wl6VkNCaPwrDdX1Q04i0FATxcJVOhXA8eL42hQX8dVNXRTEoS+HtJKgLVRDqKjILY+IEMmVwkJQhSlLmMQ6h01S8Mw+JsOo2i4KIkiXDIijdI1RSNx2A4jigU4ZJJLS7PI7cUJYqzzNcxiGUC9SY1mPUDSNES7wkpyEFtGATCyThpIEaMtXQeTEsMgLLIizTiMiYy9I3GJ8uM8KzIMHC1NqmzbPs\/yvXKhxXK3RS5AgFBDmOM5MsuKBrh80i\/Momq6O2Bi6TCwrap+KLONik14ofKEprgoJdlC5iFum+rTLo\/dlpi7i1rIVYgA===\" rel=\"noopener noreferrer nofollow\">sharplab<\/a>.<\/p>\n<p>\u0422\u0443\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u00a0\u2014 \u0440\u0430\u0434\u0438 \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0430\u044f\u0442\u044c \u043a\u0443\u0447\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u044d\u0442\u0443 \u0434\u0438\u0447\u044c \u043a\u043e\u0434\u0430.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u043f\u044f\u0442\u0430\u044f:  \u0432\u044b\u0437\u043e\u0432 \u0431\u0435\u0437 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 <s>\u043e\u0442\u0431\u0438\u0442\u0430\u044f<\/s> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u043d\u0435\u043d\u0443\u0436\u043d\u0430\u044f \u043f\u0441\u0438\u0445\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u043c \u043b\u044e\u0434\u044f\u043c \u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u0432 Java, \u043d\u043e \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0432\u0435\u0434\u043e\u043c\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u0432 \u0434\u043e\u0442\u043d\u0435\u0442\u0435:<\/p>\n<pre><code class=\"cs\">using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Reflection; using System.Runtime.Serialization;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {       Evil e = (Evil)FormatterServices.GetUninitializedObject(typeof(Evil));       e.PrintValue();         }     }          public class Evil     {         private int _value = 4;                  private Evil()          {             Console.WriteLine(\"constructed\");         }                  public void PrintValue()         {             Console.WriteLine(\"Value is {0}\", _value);         }     } }<\/code><\/pre>\n<p>\u0412\u0437\u044f\u0442\u043e <a href=\"https:\/\/rextester.com\/MNLAJ60814\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a>.<\/p>\n<p>\u041f\u0440\u0443\u0444 \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0427\u0435\u043c \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e? <\/p>\n<p>\u0422\u0435\u043c \u0447\u0442\u043e \u0432\u044b\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u043e\u00a0\u0431\u0435\u0437 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u0440\u043e\u043c, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c <strong>\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b<\/strong>.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u0431\u0438\u0442\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0440\u0443\u0447\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <strong>\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e<\/strong> \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430:<\/p>\n<pre><code class=\"cs\">using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.Reflection;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {   Evil e = (Evil)typeof(Evil)   .GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance).Single()   .Invoke(null);         }     }          public class Evil     {         private Evil()          {             Console.WriteLine(\"constructed\");         }     } }<\/code><\/pre>\n<p><a href=\"https:\/\/rextester.com\/AWKIM88984\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>.<\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0422\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0430\u00a0\u2014 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b, \u043a\u0430\u043a \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0435\u0441\u044c, \u043d\u0435\u00a0\u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043d\u0430\u0440\u0443\u0436\u0438.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0448\u0435\u0441\u0442\u0430\u044f: \u0443\u0433\u0430\u0440 \u043f\u043e \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438<\/h3>\n<p>\u041a\u043e\u0434 C# \u043d\u0438\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0438\u00a0\u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0438\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u00ab\/unsafe\u00bb:<\/p>\n<pre><code class=\"cs\">using System; unsafe class Program {     delegate void bar(int* i);     static Index \u019b(bar \u03b2) =&gt; default;     static void Main(string[] args)     {         int[] \u03c9 = { };         int \u01a9 = 42;         int? \u03a6 = 10;         var \u03fc = \u03c9;          \u03fc=\u03c9[\u019b(\u03b2:\u0394=&gt;\u03a6??=\u03c9[^++\u01a9]\/\u01a9|*&amp;\u0394[-0%\u01a9]&gt;&gt;1^\u03a6??0!&amp;~(\u03b4:\u01a9,^\u03a6..).\u03b4)..(1_0&gt;.0?\u01a9:0b1)];     } }<\/code><\/pre>\n<p><a href=\"https:\/\/twitter.com\/leppie\/status\/1492256050774487047\" rel=\"noopener noreferrer nofollow\">\u0422\u0432\u0438\u0442<\/a> \u0430\u0432\u0442\u043e\u0440\u0430, <a href=\"https:\/\/sharplab.io\/#v2:D4AQTAjAsAUArgOwM4EMBmBTABOHEDssA3rFmVgCYYA2GA5igC7YgAsWARigE4AUAlgkYAqLPwCUAblLkQEAGxYAkgioAPLIGzAXl25ZATcDisAXgB8lDGhRxqjaTHJ5FbLAFkUg3nIAMAbQC6WDx0SOIyZCQOjuSCjAFYgJPAJlhEWAC+9tExQliAlYDJrGCZWWJCAPxYgGXAyRDexVkAbjxYgD\/AyQn10eHRLcYJvtr6AFyAKcBmlWVlfb4AegDUc7n+APS5wMIAZCO+ALTeAKRLpqYQMxNl3gCEGwB+vIAtwEO5ADRnAHRv4m\/3X2+8EAB9bymN7eMq5IbeDgQcT+TppWBpIA\" rel=\"noopener noreferrer nofollow\">Sharplab<\/a>.<\/p>\n<p>\u041a\u00a0\u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u00a0\u0441\u0442\u043e\u043b\u044c <s>\u0443\u043f\u043e\u0440\u043e\u0442\u043e\u043c<\/s> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u043a\u043e\u0434\u0435\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0430.<\/p>\n<p>\u041f\u0440\u0443\u0444:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>\u0414\u0438\u0447\u044c \u0441\u0435\u0434\u044c\u043c\u0430\u044f:  \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f \u0431\u0435\u0437 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438<\/h3>\n<p>\u0426\u0438\u0442\u0438\u0440\u0443\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430:<\/p>\n<blockquote>\n<p>How about changing private fields without unsafe or reflection? I bet you thought C# was type safe. Nothing is truly black and white.<\/p>\n<\/blockquote>\n<p>\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d \u00ab\u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u043b\u00bb \u0438 \u0434\u043e\u0441\u0442\u0438\u0433 \u043f\u0440\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cs\">using System.Reflection; using System.Runtime.InteropServices; using System;  public class Alpha {     public int A;     private int B;      public Alpha()     {         this.A = 1337;         this.B = 42;     }      public void PrintB()     {         Console.WriteLine(\"My private field B is \" + this.B);     } }  public class Bravo {     public int A;     public int B; }  [StructLayout(LayoutKind.Explicit, Pack = 1)] public struct Union {     [FieldOffset(0)] public Alpha AsAlpha;     [FieldOffset(0)] public Bravo AsBravo; }  internal class Program {     static void Main(string[] args)     {         Alpha alpha = new Alpha();          \/\/ \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 42.         alpha.PrintB();          \/\/ Re-interpret as Bravo and change B to 1234.         Union union = new Union();         union.AsAlpha = alpha;         union.AsBravo.B = 1234;          \/\/ \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 1234.         alpha.PrintB();     } }<\/code><\/pre>\n<p><a href=\"https:\/\/www.reddit.com\/r\/csharp\/comments\/185wmvi\/comment\/kbosoxl\/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button\" rel=\"noopener noreferrer nofollow\">Reddit<\/a>.<\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 <strong>\u0431\u0435\u0437<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0430\u043b\u044c\u043d\u043e\u0433\u043e API \u0434\u043b\u044f \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438\u00a0\u2014 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u043a\u043e\u0434\u0430 \u0438 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043e\u0432.<\/p>\n<h3>\u0414\u0438\u0447\u044c \u0432\u043e\u0441\u044c\u043c\u0430\u044f: \u0441\u0442\u0440\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0442\u0435\u043b\u0430 \u0441\u0442\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u043c<\/h3>\n<p>\u041a\u043e\u0434, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0435\u0440\u0446\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043a \u0441\u0442\u0430\u0442\u044c\u0435:<\/p>\n<pre><code class=\"cs\">using System;  \/\/ \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435? String s = 42;  \/\/ \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 13 Console.WriteLine(s);   class String {     public override string ToString() =&gt; \"13\";     public static implicit<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-453716","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=453716"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/453716\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=453716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=453716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=453716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}