NPRG038 21.6.2012

drogan
Matfyz(ák|ačka) level I
Příspěvky: 1
Registrován: 15. 9. 2011 15:07
Typ studia: Informatika Bc.

NPRG038 21.6.2012

Příspěvek od drogan »

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


2) 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:

Kód: Vybrat vše

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?


3) 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.


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

Kód: Vybrat vše

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

Kód: Vybrat vše

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)

Kód: Vybrat vše

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)

Kód: Vybrat vše

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);
      } ) ;
}

5) 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.


6) Implementace metody A.m v CIL:

Kód: Vybrat vše

.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:

Kód: Vybrat vše

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

}

7) 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
Matfyz(ák|ačka) level I
Příspěvky: 11
Registrován: 21. 1. 2010 15:01
Typ studia: Informatika Bc.

Re: NPRG038 21.6.2012

Příspěvek od Animaniak »

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

Re: NPRG038 21.6.2012

Příspěvek od pingu »

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

6)

Kód: Vybrat vše

public static int m() {
    return 6 * v;
}
7) 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)
Odpovědět

Zpět na „NPRG038 Pokročilé programování pro .NET“