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

VPS Starter Arubacloud
0 głosów
1,784 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 2,177 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)
+1 głos
0 odpowiedzi 140 wizyt
pytanie zadane 16 czerwca 2022 w C# przez mateusz45 Gaduła (3,280 p.)
0 głosów
0 odpowiedzi 207 wizyt
pytanie zadane 23 grudnia 2018 w C# przez marcinconn Obywatel (1,560 p.)

93,015 zapytań

141,976 odpowiedzi

321,271 komentarzy

62,358 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...