[Этюд] Минутка WTF
От: Sinix  
Дата: 27.03.16 11:12
Оценка: 14 (4)
Ну что, продолжаем?

Итак, дано: .Net 4+ / mono / .Net Core и
  вот такой вот код:
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

namespace ConsoleApplication1
{
    class Program
    {
        private const bool FalseConst = false;
        private static readonly bool falseRO = false;
        private static bool falseSettable = false;

        [MethodImpl(MethodImplOptions.NoInlining)]
        private static string CaseA()
        {
            //Debugger.Break();
            return "A: " + (FalseConst ? "Set" : "Not set");
        }
        [MethodImpl(MethodImplOptions.NoInlining)]
        private static string CaseB()
        {
            //Debugger.Break();
            return "B: " + (falseRO ? "Set" : "Not set");
        }
        [MethodImpl(MethodImplOptions.NoInlining)]
        private static string CaseC()
        {
            //Debugger.Break();
            return "C: " + (falseSettable ? "Set" : "Not set");
        }

        static void Main(string[] args)
        {
            Console.WriteLine(CaseA());
            Console.WriteLine(CaseB());
            Console.WriteLine(CaseC());

            Setup();
            WriteCases();

            Console.WriteLine(CaseA());
            Console.WriteLine(CaseB());
            Console.WriteLine(CaseC());

            Console.WriteLine("Done");
            Console.ReadKey();
        }

        private static void Setup()
        {
            var bf = BindingFlags.Static | BindingFlags.NonPublic;
            var roField = typeof(Program).GetField(nameof(falseRO), bf);
            roField.SetValue(null, true);

            falseSettable = true;
        }

        private static void WriteCases()
        {
            Console.WriteLine();
            Console.WriteLine("A/B/C set? {0}, {1}, {2}", FalseConst, falseRO, falseSettable);
            Console.WriteLine();
        }
    }
}

Вопрос 1, простой: объяснить вывод для CaseB.
  Скрытый текст
A: Not set
B: Not set
C: Not set

A/B/C set? False, True, True

A: Not set
B: Not set
C: Set
Done


Вопрос 2, посложнее: где эта багофича выстреливает (в смысле, оказывается полезной)?
Отредактировано 07.01.2017 16:48 Sinix . Предыдущая версия . Еще …
Отредактировано 27.03.2016 16:38 Sinix . Предыдущая версия .
Отредактировано 27.03.2016 11:15 Sinix . Предыдущая версия .
минутка wtf
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.