[c#] prośba o sprawdzenie zadań

0

Cześć,
Moglibyście sprawdzić czy dobrze rozwiązałem te zdanka i ewentualnie poprawić błędy?
Zad1.
A) Utworzyć typ asynchronicznego delegata DCalculate dla zlecanej operacji o 2 argumentach typu int i zwracającego wartość typu int. B) Utworzyć obiekt delegata dCal typu DCalculate i przekazać mu metodę zlecaną do wykonania. C) Utworzyć obiekt delegata zwrotnego potwierdzenia i przekazać mu metodę MyResult. D) Wywołać asynchronicznie metodą BeginInvoke. E) W metodzie MyResult odebrać wynik asynchronicznego wywołania wywołując metodę EndInvoke.

a) public delegate int DCalculate(int a, int b);
b) private DCalculate dCal = new Dcalculate(mojeObliczenia);
c) AsyncCallback cb = new AsyncCallback(MyResult);
d) AsyncResult res = dCal.BeginInvoke(2, 3, cb, null); 
e) public void MyResult(IASyncResult res) 
{ 
    int wynik = dCal.EndInvoke(res); 
}

zad2.
Zdefiniować przykładowy interfejs ISortable o dwóch metodach: QSort i BSort oraz delegacie dla tych metod. Zdefiniować klasę konkretną HSort będącą klasą pochodną od klasy Sort i implementującą ISortable. W klasie HSort zdefiniować implementację interfejsu ISortable. Konkretne definicje metod można opuścić. W procedurze Main klasy głównej Test utworzyć obiekt klasy HSort, zainicjalizować delegata odpowiednią metodą. Przypisać obiekt bezpiecznie (tzn. po sprawdzeniu zgodności typów w procesie konwersji) do identyfikatora referencyjnego typu interfejsu ISortable, wywołać delegata metody, a na koniec – zwolnić obiekt typu HSort.

public interface ISorttable(public void QSort(), public void BSort())

    Class HSort : Sort, ISortable 
    {
        public void QSort() {} 
        public void BSort {} 
    }
    Class Test 
    {
  public void Main()
    {
        HSort sorts = new HSort(); 
        ISortable Isort; 
        aortDelegate sD = new sortDelegate(sorts.Qsort);
        
        if(sorts is ISortable)
        {
            Isort = (ISortable) sorts;
            sorts(); 
            sortDelegate sD = new sortDelegate (Sort.Qsort);
            Console.WriteLine("Delegat {1}", sD()}
            sorts.Dispose();
        }
    }

Szczególnie tego drugiego zadania nie jestem pewien.

1

Z tego co patrzyłem, nie widzę żadnych błędów w pierwszym.

W drugim natomiast teoretycznie też jest poprawnie, ale z zasięgiem tego if-a przesadziłeś.\

a na koniec – zwolnić obiekt typu HSort.

  • zakładając że jakimś cudem sorts nie będzie ISortable to go nie zwolnisz (a powinieneś).

To też możesz wyciągnąć:

sortDelegate sD = new sortDelegate (Sort.Qsort);
Console.WriteLine("Delegat {1}", sD()}

PS. A TO co jest, bo nie rozumiem :) " sorts();" sorts to w końcu metoda czy klasa? ...

1

8-O Zaraz zaraz... To jest na pewno C#? Co TO ma być:

public void main()

Toto ci się kompiluje?... :| Main używana jako 'entry point' musi być static...

0

To jeszcze raz druga cześć zadania
"W procedurze Main klasy głównej Test utworzyć obiekt klasy HSort, zainicjalizować delegata odpowiednią metodą. Przypisać obiekt bezpiecznie (tzn. po sprawdzeniu zgodności typów w procesie konwersji) do identyfikatora referencyjnego typu interfejsu ISortable, wywołać delegata metody, a na koniec – zwolnić obiekt typu HSort."

class Test
{ 
	static void Main() 
	{ 
		ISortable iSort; 
		HSort h =new HSort(); 

		if (h is ISortable) 
		{ 
			// nie wiem co tutaj
		} 
	} 
}

1

Ja bym zrobił tak:

        delegate void SortDelegete();

        static void Main()
        {
                private HSort hsort =new HSort();

                if (hsort is ISortable)
                {
                        ISortable isort = (Isortable)hsort;

                        SortDelegate sD = isort.Qsort;
                        Console.WriteLine("Delegat {1}", sD()}
                }
                
                hsort.Dispose()
        } 

Tylko trochę zmieniłem kolejność, bo twoja wydawała mi się nieco bez sensu:

W procedurze Main klasy głównej Test utworzyć obiekt klasy HSort, zainicjalizować delegata odpowiednią metodą. Przypisać obiekt bezpiecznie (tzn. po sprawdzeniu zgodności typów w procesie konwersji) do identyfikatora referencyjnego typu interfejsu ISortable, wywołać delegata metody, a na koniec – zwolnić obiekt typu HSort.

  • chyba najpierw trzeba sprawdzić czy obiekt ma metodę (implementuje interfejs) a potem ją przypisać. Chyba że czegoś nie rozumiem :) upewnij się co de tego zadania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1