static void Implementowanie_Interfajsu_W_Sposób_Jawny() { /* Dotyczy przypadku, gdy klasa dziedziczy po dwóch lub wiecej interfejsów i nazwa któreś metody się powtarza. * Należy jawnie zaimplementowac ten interface w definicji metody np. IOblicz.ObliczDystans(), przykład w klasie 'Kostka'. * Jeśli tego nie zrobimy to metoda ObliczDystans() bedzie implementować oba interferjsy. (Domyślnie C# nie dokonuje rozrożnienia, który interfejs jest implementowany przez daną metode). * * Wywołanie takiej metody: * Jawnie zaimplementowany interfajs oznacza, że gdy utworzymy obiekt klasy i przypiszemy go do zmiennej o typie danego interfacjsu, * umożliwi to wywołanie funkcji danego interfejsu. */ IOblicz kostka = new Kostka(); Console.WriteLine(kostka.ObliczDystansDo(new Kula())); // Wykona się metoda ineterfejsu IOblicz IRuch kostka2 = new Kostka(); Console.WriteLine(kostka2.ObliczDystansDo(new Kula())); // Wykona się metoda ineterfejsu IMove /* Z poziomu obiektu klasy 'Kostka', który implementuje interfejs w sposób jawny, metody 'ObliczDystansDo()' mają prywatny poziom dostępności. * Oznacza to że nie można wywołać któreś z tych metod gdy obiekt przypisany jest do zmiennej typu 'Kostka'. * (Jeśli w klasie są 2 lub wiecej metod które nazywają się tak samo to nie wiadomo, która metoda ma się wykonać.) */ Kostka kostka3 = new Kostka(); Console.WriteLine(kostka3.ObliczDystansDo(new Kula())); // 'Kostka' does not contain a definition for 'ObliczDystansDo' // Note: Zaleca się aby zawsze gdy to jest możliwe, implementować interfejsy w sposób jawny! }
override public void Vytvor() { Console.WriteLine("Zadej jméno hrdiny: "); string jmeno = Console.ReadLine(); Console.WriteLine("Zadej maximální sílu hrdiny: "); int maxSila; while (!int.TryParse(Console.ReadLine(), out maxSila)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej minimální sílu hrdiny: "); int minSila; while (!int.TryParse(Console.ReadLine(), out minSila)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej maximální intelekt hrdiny: "); int maxIntel; while (!int.TryParse(Console.ReadLine(), out maxIntel)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej minimální intelekt hrdiny: "); int minIntel; while (!int.TryParse(Console.ReadLine(), out minIntel)) { Console.WriteLine("Neplatné zadání, zadej znavu: "); } Console.WriteLine("Zadej maximální obratnost hridny: "); int maxObratnost; while (!int.TryParse(Console.ReadLine(), out maxObratnost)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej minimální obratnost hrdiny: "); int minObratnost; while (!int.TryParse(Console.ReadLine(), out minObratnost)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Kostka sila = new Kostka(minSila, maxSila); Kostka intelekt = new Kostka(minIntel, maxIntel); Kostka obratnost = new Kostka(minObratnost, maxObratnost); var novyHrdina = new Hrdina(jmeno, sila, intelekt, obratnost); Objekty.Add(novyHrdina); }
static void Klasy_Abstrakcyjne() { /* Gdy kod się powtarza jednym z rozwiązań jest utworzenie klasy bazowej i umieszczenie w niej wspólnej implementacji. */ Bryla bryla = new Bryla(); //Błąd kompilacji Bryla kula = new Kula(); Bryla kostka = new Kostka(); /* Należy zwrócić uwagę, że klasa abstrakcyjna nie dziedziczy żadnego interfejsu. (Implementacja interfejsów jest cechą klas takich jak 'Kula' czy 'Kostka' a nie klas abstrakcynych) * Mimo to klasa abstrakcyjna 'Bryla' implementuje metodę 'UstawPozycje(PozycjaNaOsi pozycja)' jako nornalną metode publiczną. (Metoda 'UstawPozycje' znajduje się w interfejsie 'IPozycja') * Przez co klasy pochodne klasy 'Bryla' nie muszą implementować własnej wersji tej metody, pomimo, że implementują interfejs 'IPozycja', gdyż została ona już odziedziczona. */ kula.UstawPozycje(new PozycjaNaOsi(1, 2, 4)); kostka.UstawPozycje(new PozycjaNaOsi(4, 1, 1)); }
override public void Vytvor() { Console.WriteLine("Zadej jméno nepřítele: "); string jmeno = Console.ReadLine(); Console.WriteLine("Zadej zdraví nepřítele: "); int zdravi; while (!int.TryParse(Console.ReadLine(), out zdravi)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej minimální útok nepřítele: "); int minutok; while (!int.TryParse(Console.ReadLine(), out minutok)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej maximální útok nepřítele: "); int maxutok; while (!int.TryParse(Console.ReadLine(), out maxutok)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej minimální obranu nepřítele: "); int minobrana; while (!int.TryParse(Console.ReadLine(), out minobrana)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Console.WriteLine("Zadej maximální obranu nepřítele: "); int maxobrana; while (!int.TryParse(Console.ReadLine(), out maxobrana)) { Console.WriteLine("Neplatné zadání, zadej znovu: "); } Kostka utok = new Kostka(minutok, maxutok); Kostka obrana = new Kostka(minobrana, maxobrana); var novyNepritel = new Nepritel(jmeno, zdravi, utok, obrana); Objekty.Add(novyNepritel); }
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); } }
private void button1_Click(object sender, EventArgs e) { liczba1 = Convert.ToDouble(txtA.Text); liczba2 = Convert.ToDouble(txtB.Text); liczba3 = Convert.ToDouble(txtC.Text); if (radioVol.Checked) { Kostka k1 = new Kostka(liczba1, liczba2, liczba3); txtVol.Text = k1.Vol().ToString(); txtArea.Text = k1.Area().ToString(); } if (radArea.Checked) { Stozek s1 = new Stozek(liczba1, liczba2); txtVol.Text = s1.Vol().ToString(); txtArea.Text = s1.Area().ToString(); } }
private void btnLosuj_Click(object sender, RoutedEventArgs e) { bool DiceSelected = false; if (ActivePlayer.DrawsLeft == 3) { cbKostka1.IsChecked = true; cbKostka2.IsChecked = true; cbKostka3.IsChecked = true; cbKostka4.IsChecked = true; cbKostka5.IsChecked = true; } if (ActivePlayer.DrawsLeft > 0) { if (cbKostka1.IsChecked == true) { DiceSelected = true; imgKostka1.Source = Kostka.Main(); imgKostka1.ToolTip = imgKostka1.Source.ToString().Substring(imgKostka1.Source.ToString().Length - 5, 1); cbKostka1.IsChecked = false; } if (cbKostka2.IsChecked == true) { DiceSelected = true; imgKostka2.Source = Kostka.Main(); imgKostka2.ToolTip = imgKostka2.Source.ToString().Substring(imgKostka2.Source.ToString().Length - 5, 1); cbKostka2.IsChecked = false; } if (cbKostka3.IsChecked == true) { DiceSelected = true; imgKostka3.Source = Kostka.Main(); imgKostka3.ToolTip = imgKostka3.Source.ToString().Substring(imgKostka3.Source.ToString().Length - 5, 1); cbKostka3.IsChecked = false; } if (cbKostka4.IsChecked == true) { DiceSelected = true; imgKostka4.Source = Kostka.Main(); imgKostka4.ToolTip = imgKostka4.Source.ToString().Substring(imgKostka4.Source.ToString().Length - 5, 1); cbKostka4.IsChecked = false; } if (cbKostka5.IsChecked == true) { DiceSelected = true; imgKostka5.Source = Kostka.Main(); imgKostka5.ToolTip = imgKostka5.Source.ToString().Substring(imgKostka5.Source.ToString().Length - 5, 1); cbKostka5.IsChecked = false; } if (DiceSelected) { ActivePlayer.DrawsLeft--; // = ActivePlayer.DrawsLeft - 1; } } else { System.Windows.Forms.MessageBox.Show("Możesz przelosować kości tylko 2 razy."); } //MessageBox.Show(Kostka.Main()); }