NPRG038 21.6.2012

drogan at 2012-06-25 10:41:26

No, tak tenhle termin byl fakt vtipny. Kdyz jsem odchazel, pulka lidi mu to uz vratila.

  1. ??? x = new ExpandoObject();
    x.NovaPolozka = "hodnota";
    x.AJesteDalsi = 42;

Co se muze doplnit za ???. Moznosti byly: dynamic, ExpandoObject, IDynamicMetaObjectProvider, object, var

  1. V aplikaci vytvoříme partial-trust apl. doménu A, do které budeme pomocí třídy Api z assembly Api.dll nahrávat nedůvěryhodné plug-iny. Assembly Api.dll nahraná v A bude plug-inům sloužit pro komunikačni s full-trust kodem v implicitní apl. doméně aplikace.

Api.dll:

using ...
...
public class Api: MarshalByRefObject
{
   public void f() {...}
   public void g() {...}
}
...

Metoda f má být volatelná pouze z full-trust, metoda g bude využívána plug-iny. Předpokládané nastavení level 2 transparency rules.

otázky: - Musí být při tvorbě A dodány kromě nastavení vhodné PermissionSet ještě nějaké konfigurační parametry? Jestli ano, které?
- Musí být assembly Api.dll nějak speciálně označena / přeložena? Pokud ano, jak?

  1. Jak z textového řetězce získat první grafém (tím se myslí například ve slove Štěpán -> 1. grafém "Š"). Pomocí čeho to jde?
    Možnosti: CultureInfo, StringInfo, String zkonstruovaný vhodným Encoding, String zkonstruovaný vhodným IFormatProvider, String zkonstruovaný vhodným IFormatable.

  2. Vyberte nejvhodnější implementaci metody P:
    a)

    static Task<X> P(Taxk<X> a, Task<X> b) { return Task<X>.Factory.StartNew(() => { return a.Result.Add(b.Result); } ); }

b)

static Task<X> P(Taxk<X> a, Task<X> b) {
   return Task<X>.Factory.StartNew(() =>
      { Task<X>.WaitAll(a, b);
         return a.Result.Add(b.Result); } );
}

c)

static Task<X> P(Task<X> a, Task<X> b) {
   return Task<X>.Factory.ContinueWhenAll<X> (
      new [] {a ,b}, (t) => { return
         t[0].Result.Add(t[1].Result);
      } ) ;
}

d)

static Task<X> P(Task<X> a, Task<X> b) {
   return Task<X>.Factory.ContinueWhenAll<X> (
      new [] {a ,b}, (t) => { return
         a.Result.Add(b.Result);
      } ) ;
}
  1. Mám nějaké data v databázi a stáhnu si je do datasetu. Na řádce X a sloupci Y, kde je nyní hodnota 1, změním hodnotu na 2. Než stačím nahrát data z datasetu zpátky do databaze, někdo přepsal v databázi na řádce X a sloupci Y hodnotu 1 na 3. Co se stane po zavolání metody Update na IDataAdapteru s implicitně vygenerovaným Update dotazem?
    Možnosti: - bez chyby, v datasetu bude 2, v databázi 3

  • chyba, v datasetu bude 2, v databazi 3

  • hodnota v datasetu se přepise z 2 na 3

  • hodnota v databazi se prepise z 3 na 2.

  1. Implementace metody A.m v CIL:

    .method public hidebysig static int32 m() cil managed { .maxstack8 ldsfld int32 A::v ldc.i4.6 mul ret }

Ukolem je napsat implementaci třídy A tak, aby odpovídalo uvedené implementaci z assembly:

public class A 
{
   public static int v;
   ...

}
  1. Otázka z WPF na 3 MessageBoxy, která tady koluje na foru. Kolik se vyvola MsgBoxu, co se vypise v prvním z nich.

Mno, kdybyste někdo věděli správné odpovědi, určitě se se zbytkem podělte :). Díky

Animaniak at 2012-06-25 21:40:18

na jedničku je pouze dynamic,jinak nevim :D

pingu at 2012-06-27 21:57:05
  1. Zkusil bych to vysvětlit nějak takhle: Jedině je-li proměnná deklarovaná klíčovým slovem dynamic, do všech výrazů/příkazů s ní se vygeneruje kód pro runtimové vyhledání datových položek/vlastností/metod, umožňující v případě ExpandoObjectu i jejich automatické přidání. U deklarace pomocí (jakéhokoli) typu se nic takového neděje a výrazy/příkazy jsou přeloženy normálně staticky (takže lze přistupovat jen k položkám, které jsou už někde definovány).

  2. ani v jednom případě není správná odpověď "ne" :)

  3. jenom StringInfo

  4. c)

  5. jestli se nepletu, tak chyba

public static int m() {
    return 6 * v;
}
  1. doplnění zadání pro nehledače:
    XAML - vnořené Window, StackPanel, Button, v každém atribut PreviewMouseDown="Common_PreviewMouseDown"
    Code behind - v metodě Common_PreviewMouseDown(object sender, MouseEventArgs e) vyskočí messagebox s vypsanými typy položek sender, e.Source a e.OriginalSource
    Obrázek - myš kliká na text na Buttonu
    řešení: zobrazí se 3 messageboxy, v prvním se vypíše Window, Button, TextBlock
    (v ostatních messageboxech se bude lišit jen sender)