# Zk 23.1.2012

<{ForumPost(poster="Drozi", timestamp=2012-01-23 17:09:11)}>
Příklady si přesně nepamatuju, ale tak aspoň nástin dnešní zkoušky. Zařadil bych ji tak možná do těžšího průměru.  
  
1. klasika - velikost int \[4B]  
  
2.

        // misto 1
        public class A
        {
            // misto 2
            public int ia;
            public void m(B b)
            {
                b.ib = 42;
                ib = 42;
            }
    
            public class B : I
            {
                //misto 3
                public int ib;
                public void m(A a)
                {
                    a.ia = 42;
                    ia = 42;
                }
            }
        }
    

Tady bylo potřeba označit řádky, který sou špatně \[ib = 42; a ia = 42;] + další otázka byla, kam a jak se má dopsat definice interfacu I, tak aby "tvořila privátní kontrakt mezi A a B" (nebo jak to tam bylo napsaný). Z možností sem vybral, že má být private a na miste 2. Myslim, že to bylo dobře, ale jistej si nejsem.  
  
3. klasická otázka, co platí a neplatí pro user-defined třídy.  
  
4. (4|2)^(1024^6)  
  
5. příklad na enumerátor. Něco ve smyslu:

    using System;
    using System.Collections.Generic;
    
    static class Program
    {
        static IEnumerable<int> GetLenghts(this string[] list)
        {
            if (list == null)
            {
                throw new ArgumentException();
                
            }
    
            foreach (string s in list)
            {
                Console.Write("x ");
                yield return s.Length;
            }
        }
    
        static void Main()
        {
            string[] x = { "a", "aa", "aaa" };
            foreach (int i in x.GetLenghts())
            {
                Console.WriteLine(i);
                break;
            }
        }
    }
    

A co tohle vypíše.  
Možnosti byly něco jako, že to vyhodí runtime chybu, pak že je to závislý na platformě a .NETu, že to vypíše x x 1, x x x 1.... správná odpověď byla x 1.  
  
Další otázka byla na vlákna. Snad ji někdo doplní. Šlo tam přibližně o tohle:

    class X
    {
        public static volatile int a;
        public static long b;
        public static volatile int c;
    
        public void T2()
        {
            b = -1;
            System.Console.WriteLine(b);
        }
    
        public void T1()
        {
            a = 1;
            b = 2;
            c = 3;
        }
    }
    

Když pustíme T1 a T2 ve dvou vláknech, tak co se bude dít. Možnosti byly typu "a se vždy zapíše před c, b se vždy zapíše po a, atd..."  
  
Poslední otázka byla na virt. metody.

    using System;
    
    class A
    {
        public virtual void m()
        {
            Console.WriteLine("A");
        }
    }
    
    class B : A
    {
        public override void m()
        {
            Console.WriteLine("B");
        }
    }
    
    class C :B
    {
        public override void m()
        {
            Console.WriteLine("C");
            ((A)this).m();
        }
    }
    
    class Program
    {
        static void Main()
        {
            A x = new C();
            x.m();
        }
    }
    

Co se vypíše? Možnosti něco jako: Jen A, Jen C, Jen A C, Jen A A, Něco jiného. //Něco jiného - bude se vypisovat C v nekonečné rekurzi až do zdechnutí na stackoverflow.  
  
Kdyžtak mě někdo doplňte. Vše samozřejmě bez záruky :)
<{/ForumPost}>

<{ForumPost(poster="svick", timestamp=2012-01-23 21:18:04)}>

 > Drozi wrote:
 > Další otázka byla na vlákna. Snad ji někdo doplní. Šlo tam přibližně o tohle:
 > 
 > 
 > 
 > 
 >     class X
 >     {
 >         public static volatile int a;
 >         public static long b;
 >         public static volatile int c;
 >     
 >         public void T2()
 >         {
 >             b = -1;
 >             System.Console.WriteLine(b);
 >         }
 >     
 >         public void T1()
 >         {
 >             a = 1;
 >             b = 2;
 >             c = 3;
 >         }
 >     }
 >     
 > 
 > 
 > 
 > 
 > Když pustíme T1 a T2 ve dvou vláknech, tak co se bude dít. Možnosti byly typu "a se vždy zapíše před c, b se vždy zapíše po a, atd..."

Myslím, že ty fieldy nebyly static, ale to na otázce nic nemění. A taky tam byly možnosti „T2 může vypsat -1/2/0/něco jiného“.
<{/ForumPost}>

