• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Interfejsy i rzutowanie. Rzutowanie zrealiować w zakresie interfejsów, nie typów danych.

Object Storage Arubacloud
0 głosów
1,617 wizyt
pytanie zadane 17 stycznia 2016 w C# przez Mateusz Nowicjusz (220 p.)
Witajcie potrzebuję krótki program w którym będzie zawarte rzutowanie w zakresie interfejsów. Może jakiś gotowy kod albo tutorial gdzie się dowiem dokładnie o co chodzi, najlepiej z przykładami bo trudno samemu coś wymyślić.

5 odpowiedzi

+1 głos
odpowiedź 17 stycznia 2016 przez Dorion300 Szeryf (90,250 p.)
A więc mam pomysł na pierwszą.
Ale mam także do ciebie kilka pytań.
Jakie to muszą być programy?
One muszą coś praktycznego robić? np. obliczać deltę?
Czy bardziej przykładowo zastosowanie interfejsów? np. Eptak, Ewiewórka, Eczłowiek które dziedziczą z Iorganizm?
i np. Iorganizm posiada parametry wagi, wielkości, spalenie organizmu i wyeksportowanie z niego "pokarmu" dla drugiego organizmu który ten go "zjadł" i ma nadwagę?
Znasz podstawy interfejsów, czy masz nauczyć się tego sam?
Jeśli nie umiesz, koledzy powyżej/poniżej dali tutoriale.

Dobra, a teraz czas na pierwszy program:
Niech będzie interfejs Igo który informuje że obiekt potrafi się samodzielnie poruszać, ma swoją wagę.
czyli w interfejsie metoda Go(int time) i double weight{public get; protected set;}
Potem będziesz robił różne obiekty poruszające się czyli takie jak SpaceShip, Car i tak dalej.
Warto dodać że jeśli mowa o SlaceShip i Car to muszą być one abstrakcyjne, i dziedziczysz potem z tych abstrakcyjnych klas określone pojazdy z określonymi rzeczami.
Potem jak tworzysz określony obiekt to wrzuczasz do jednego wora, tym przypadku np. do kolektora Vector<Igo> które zawierają wszystkie obiekty które się poruszają.

I forme już mamy.
Teraz tylko tworzyć obiekty, dawać im wagi, szybkość (szybkość może być dodana do interfejsie jeśli potrzebujesz to).
Możesz z tego zrobić program typu: kto najszybciej dojdzie do celi, (w sposób turowy)
I co każdej turze możesz zmieniać parametry i sprawdzaj dokładniejsze dane np. rzutować Igo na np. SpaceShip i sprawdzić jego Cargo.

Pomysł chaotyczny i da się to lepiej zrobić, (w tym przypadku same rzutowanie, gdyż trzeba metodą prób i błędów sprawdzać czy ten jest np. spaceshipem)
Ale można to jakoś załatać. (np. pierwsze co mi chodzi po głowie to każdy co dziedziczy Igo to przechowuje w String nazwę obiektu którym jest)

Ale w sumie o ile dobrze pamiętam to w .NET są różne klasy które potrafią sprawdzać obiekty pod różnym kątem, np. sprawdzić z czego dziedziczy, jak typ posiada. (w sposób dynamiczny)
0 głosów
odpowiedź 17 stycznia 2016 przez niezalogowany

Nie mam bladego pojęcia o co konkretnie Ci się rozchodzi, więc podrzucę Ci główny wątek

komentarz 17 stycznia 2016 przez efiku Szeryf (75,160 p.)

Pewnie chodzi mu o to, aby w argumencie metody był podany jako typ interfejs ? :D

 public bool connect(DatabaseInterface database)
    {
       // create connection
       // . ... 
        this.database = dbHandle;
        return true;
    }

Albo

http://stackoverflow.com/questions/5961450/what-is-interface-casting-for-in-c

komentarz 17 stycznia 2016 przez niezalogowany
Więc w sumie wystarczy, że opanuje samą koncepcję tych interfejsów i zrozumie z czym to się je.
komentarz 17 stycznia 2016 przez efiku Szeryf (75,160 p.)
A jak zrozumie to się zakocha :D
0 głosów
odpowiedź 17 stycznia 2016 przez drek Gaduła (4,980 p.)

Też nie bardzo wiem o co Ci chodzi, bo nieprecyzyjnie sformułowałeś swoje pytanie. Jedyne co mi przychodzi do głowy to rzutowanie implementacji do interfejsu i interfejsu do implementacji.

public interface ISomeInterface {
	void foo();
}

public class ImplOne : ISomeInterface {
	public void bar() {}

	// implementacja interfejsu
	public void foo(){}
}

public class ImplTwo : ISomeInterface {
	public void baz(){}

	// implementacja interfejsu
	public void foo(){}
}

public static int Main ()
{
	ImplOne impl1 = new ImplOne ();
	ImplTwo impl2 = new ImplTwo ();


	// niejawne "rzutowanie" do interfejsu; jest bezpieczne; nie wymaga specjalnej składni
	ISomeInterface impl1_implicit = new ImplOne ();
	impl1_implicit = impl1;

	// jw. tylko z drugim interfejsem
	ISomeInterface impl2_implicit = new ImplTwo ();
	impl2_implicit = impl2;


	// rzutowanie do implementacji
	// to nie zadziała - takie rzutowanie nie jest bezpieczne; wymaagna jest jawne rzutowanie
	//ImplOne impl1_cast = impl1_implicit;
	ImplOne impl1_cast = (ImplOne)impl1_implicit;


	// to nie zadziała - takie rzutowanie nie jest bezpieczne; wymaagna jest jawne rzutowanie
	//ImplTwo impl2_cast = impl2_implicit;

	// to też nie zadziała w czasie wykonania, bo rzutowanie jest do innej implementacji niż faktycznie obiekt jest
	//ImplOne impl2_cast = (ImplOne)impl2_implicit;
	ImplTwo impl2_cast = (ImplTwo)impl2_implicit;

	return 0;		
}

 

0 głosów
odpowiedź 17 stycznia 2016 przez Mateusz Nowicjusz (220 p.)

Jestem studentem drugiego roku informatyki i mam na programowanie przygotować: "Interfejsy i rzutowanie - Trzy oryginalne programy autorskie implementujące tematykę interfejsów w C#. Rzutowanie proszę zrealizować w zakresie interfejsów, nie typów danych."

Jedyne co znalazłem na internecie to ten link: 

http://www.centrumxp.pl/dotNet/1118,11-Interfejsy-czesc-2.aspx

Myślicie że może o to chodzić?

Dwa programy implementującę tematykę interfejsów mam zrobione w 3 muszę wykorzystać rzutowanie.

komentarz 17 stycznia 2016 przez drek Gaduła (4,980 p.)

Myślę, że może chodzić o to abyś wymyślił sobie program w którym będziesz w miarę sensowny sposób wykorzystywał interfejsy i rzutowanie obiektów. To co podałeś w linku wygląda OK.

Poza tym o przykładach interfejsów możesz poczytać np. tutaj:

https://msdn.microsoft.com/en-us/library/87d83y5b.aspx

https://msdn.microsoft.com/en-us/library/25taz5yz(v=vs.71).aspx

http://www.codeproject.com/Articles/18743/Interfaces-in-C-For-Beginners

http://www.c-sharpcorner.com/UploadFile/sekarbalag/interface-best-example-in-csharp/

http://www.csharp-station.com/Tutorial/CSharp/Lesson13

 

Poza tym polecenie brzmi dość jednoznacznie. "Interfejsy i rzutowanie - Trzy oryginalne programy autorskie implementujące tematykę interfejsów w C#. Rzutowanie proszę zrealizować w zakresie interfejsów, nie typów danych." Masz problemy, ze zrozumieniem całego polecenia, czy może z jakimś fragmentem? Jeśli z fragmentem to z jakim?

0 głosów
odpowiedź 17 stycznia 2016 przez Mateusz Nowicjusz (220 p.)
Dziękuję wam wszystkim za pomoc. Programiki, które zrobiłem wrzucę jutro jak je dopracuję :)

Podobne pytania

0 głosów
2 odpowiedzi 1,936 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)
+1 głos
0 odpowiedzi 128 wizyt
pytanie zadane 16 czerwca 2022 w C# przez mateusz45 Gaduła (3,240 p.)
0 głosów
0 odpowiedzi 188 wizyt
pytanie zadane 23 grudnia 2018 w C# przez marcinconn Obywatel (1,560 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...