Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

31

27.02.2014, 17:39

10 Zeilen Klassencode zu schreiben ist natürlich totaler Overkill. (Wenn auch wie bereits gesagt, das Feature trotzdem praktisch ist)
In C++ machst du einfach zb. einen "typedef", dann ist die zugrundeliegende Klasse nach außen nicht mehr direkt sichtbar.
Wenn man es darauf anlegt, kann man auch bei C# einfach einen Cast machen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

32

27.02.2014, 17:40

So wie dot es sagt, mache ich das übrigens bei meinem Kram.

@SP: 10 Zeilen? Ja klar, wenn die Iteration selbst nur 2 Zeilen lang war. Ansonsten... :rolleyes:
Der Cast geht eben auch nur dann, wenn man weiß, was bei rauskommt und ist damit eventuellen Interface-Änderungen gnadenlos ausgeliefert. Wenn man es auf Mist anlegt, wird man auch Mist bekommen. Das ist aber wohl kaum die Frage gewesen. Denn nach der Logik kann man sämtliche Interface-Typen auch gleich abschaffen, weil man ja eh in die konkrete Implementierung casten kann. :pinch: Spannend wird's aber, wenn die konkrete Implementierung für Dich gar nicht sichtbar ist. In was genau castest Du dann doch gleich noch?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (27.02.2014, 17:48)


Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

33

27.02.2014, 17:49

Ich sagte auch nur, es geht, nicht man es machen sollte, oder gar "Interfaces" wären deshalb schlecht.
Genauso wie es bei C++ zb. mit "typedef" geht.
Der Unterschied ist marginal.

10 Zeilen Klasse + Code der Implementierung.
Komplett von alleine programmiert sich weder bei C++ noch bei C# etwas.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

34

27.02.2014, 17:53

Der Unterschied ist nicht marginal. Es geht darum ein internes Implementierungsdetail nicht nach außen kommunizieren zu müssen. Dass man per Reflection zur Laufzeit trotzdem auslesen kann, welcher Typ dahinter steckt, ist eine GANZ andere Sache. Das bekommt man auch per Decompiler raus. Darum geht's aber gar nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

35

27.02.2014, 17:58

In wie fern kommen bei dir denn Implementationsdetails nach äußen, wenn du C++ Iteratoren verwendest?
Hast du ein Beispiel?
Ich habe nämlich das Gefühl, das wir hier ganz massiv an einander vorbei reden.
Was du aufführst, darum geht es mir nämlich tatsächlich auch nicht.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

36

27.02.2014, 18:03

Na denk mal drüber nach, wo bei der Verwendung eines Iterators wohl Implementierungsdetails nach außen getragen werden bei C++.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

37

27.02.2014, 18:24

Wenn man es richtig macht, wüsste ich nicht wo.
Klär mich auf, was du konkret meinst.

Schnell und einfach hingeschmiert:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
class SomeObjectContainer
{
public:
    typedef std::vector<*>::iterator ObjectIterator;
    typedef std::vector<*>::const_iterator ObjectConstIterator;
    ObjectIterator ObjectsBegin();
    ObjectIterator ObjectsEnd();
    ObjectConstIterator ObjectsCBegin() const;
    ObjectConstIterator ObjectsCEnd() const;
};

Nach außen ist vom Vektor praktisch nichts mehr zu sehen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

38

27.02.2014, 18:38

Soooo, nun nochmal ohne typedef, denn genau dieses trägt ganz offensichtlich das Implementierungsdetail nach außen. Es handelt sich intern um einen std::vector. Genau das soll aber vermieden werden. Ich dachte das sei mittlerweile klar geworden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

39

27.02.2014, 18:42

Wieso ohne "typedef"? Das ist doch genau nur dafür da, damit der Vector eben nicht stark nach außen getragen wird.
Intern handelt sich bei C# auch um eine List oder was auch immer.
Ich sehe den großen Unterschied hier einfach nicht, von dem du redest.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

40

27.02.2014, 18:43

Er wird aber nach außen getragen. So oder so.
Ein Interface ist public, die dahinter liegende konkrete Implementierung unbekannt.
Ein Typdef ist public, die dahinter liegende konkrete Implementierung explizit bekannt gemacht.

Um es eindeutig zu machen. Um welche konkrete Implementierung handelt es sich hier intern?

C#-Quelltext

1
IEnumerable<int> StartingValues();
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige