static void Implementowanie_Interferjsu_W_Sposób_Niejawny() { /* Jest to raczej nieprawidłowe zachowanie. Powinno się implementować w sposób jawny a w szczególności gdy nazwa metody się powtarza. * Klasa 'Kula' implementuje interfejs 'IRuch' oraz 'IOblicz' w sposób niejawny, przez co zawiera jedną implementacje metody 'ObliczDystandDo()' lecz definicja tej metody * znajduje się w obydwóch interfejsach. Domyślnie język C# nie dokonuje rozrożnienia, który interfejs jest implementowany przez daną metode. */ Kula kula = new Kula(); kula.ObliczDystansDo(new Kula()); IOblicz obliczKula = kula; obliczKula.ObliczDystansDo(new Kula()); IRuch ruchKuli = kula; ruchKuli.ObliczDystansDo(new Kula()); }
static void Obiekty_Przypisane_Do_Typu_Interfejs() { /* Można przypisać obiekt implementujący dany interfejs do typu danego interfejsu w taki sam sposób jak w rodziale 12 do typu wyżej w hierarchi dziedziczenia. * Tak samo możliwe jest utworzenie metody akceptującej parametry typu interfejs. np. */ Kula kula = new Kula(); IRuch ruchKuli = kula; RuchBryly(ruchKuli, new PozycjaNaOsi(1, 2, 2)); IRuch ruchKostki = new Kostka(1.1, 1.9, 2.9, new PozycjaNaOsi(1, 1, 2)); // 1 wymiary kostki, 2 pozycja na osi RuchBryly(ruchKostki, new PozycjaNaOsi(1, 2, 2)); void RuchBryly(IRuch bryla, PozycjaNaOsi nowaPozycja) { bryla.WykonajRuch(nowaPozycja); } }