using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LocalVariables
{
    class Examples11_15
    {
        //// Listing 2-11 (umieszczony w komentarzach gdyż ilustruje błąd)
        //static void SomeMethod()
        //{
        //    int thisWillNotWork = 42;
        //}

        //static void AnotherMethod()
        //{
        //    Console.WriteLine(thisWillNotWork);
        //}

        public static void UseVariableFromContainingScope()
        {
            // Listing 2-12
            int someValue = GetValue();
            if (someValue > 100)
            {
                Console.WriteLine(someValue);
            }
        }

        // Nie należy do przykładów przedstawionych w tekście książki, ale potrzebny
        // do ich działania.
        // (Pochodzenie oraz przeznaczenie wartości nie ma znaczenia dla tego przykładu.)
        private static int GetValue()
        {
            return 123;
        }


        //// Kod umieszczony w komentarzach gdyż ilustruje błąd.
        //public static void AttemptToUseOutOfScopeVariable()
        //{
        //    // Listing 2-13
        //    int someValue = GetValue();
        //    if (someValue > 100)
        //    {
        //        int willNotWork = someValue - 100;
        //    }
        //    Console.WriteLine(willNotWork);
        //}


        //// Kod umieszczony w komentarzach gdyż ilustruje błąd.
        //public static void SurprisingScopeCollision()
        //{
        //    // Listing 2-14
        //    int someValue = GetValue();
        //    if (someValue > 100)
        //    {
        //        int anotherValue = someValue - 100;
        //        Console.WriteLine(anotherValue);
        //    }

        //    int anotherValue = 123;
        //}

        //// Kod umieszczony w komentarzach gdyż ilustruje błąd.
        //public static void HidingVariables()
        //{
        //    bool problem1 = true;
        //    bool problem2 = false;

        //    // Listing 2-15
        //    int errorCount = 0;
        //    if (problem1)
        //    {
        //        errorCount += 1;

        //        if (problem2)
        //        {
        //            errorCount += 1;
        //        }

        //        // Wyobraźmy sobie, że w prawdziwym programie w tym
        //        // miejscu znajduje się duży blok kodu. 

        //        int errorCount = GetErrors();  // Błąd kompilatora 
        //        if (problem3)
        //        {
        //            errorCount += 1;
        //        }
        //    }
        //}
    }
}
