Seite 1 von 1

[SOLVED] [C#] Was ist das? O.o [Indexer]

Verfasst: 17.02.2013, 17:31
von Herror
War gerade am Portieren einer Codestelle von C# in C++.
Habe ja ein Buch und der Code dazu ist leider in C#. Nun bin ich auf etwas gestoßen das ich nicht kenne... Weiß nicht wie man sowas nennt also konnte ich nicht wirklich googlen.

Code: Alles auswählen

public abstract class ColorAttachments
    {
        public abstract Texture2D this[int index] { get; set; }
        public abstract int Count { get; }
        public abstract IEnumerator GetEnumerator();
    }
kann mit jemand erklären was das für eine art Array ist, was das macht und wie man das benutzt?
Oder vielleicht reicht es auch wenn jemand weiß wie das heißt, ich google dann selber danach.

Re: [C#] Was ist das? O.o

Verfasst: 17.02.2013, 17:36
von Artificial Mind
Das sind Auto-Properties.

Properties können halt getter und setter definieren, die nach Außen wie eine Variable aussehen, intern aber Funktionsaufrufe sind. Wenn man deren Implementierung weglässt, sind das "Auto-Properties" und das ist wie ne normale Variable. Da die aber abstract sind, kann man die auch in einer Subklasse überschreiben.
Das Texture2D-Ding ist zusätzlich ein Indexer, also quasi ein eigener Arrayzugriff.

Am nächsten kommst du dem mit C++ wohl mit virtuellen getter- und setter-Funktionen

EDIT:
http://msdn.microsoft.com/en-us/library/bb384054.aspx
http://msdn.microsoft.com/de-de/library ... s.80).aspx

Re: [C#] Was ist das? O.o

Verfasst: 17.02.2013, 17:41
von Herror
Naja, ich kenn mich nur sehr grundlegend mit C# aus aber was Getter und Setter sind weiß ich.
Es geht mit hauptsächlich um den Texture2D member.
Ich wüsste jetzt nicht wie man den von außen anspricht. Ist ColorAttachements dadurch eine Art Texture2D Array, sobald ich einen index eines Objektes mit eckigen klammern anspreche und ein normales Objekt wenn ich die Klammern weglasse?

Und wie settet man überhaupt dieses Array, wenn es gar kein Member ist... Hab ja keinen Namen womit ich es ansprechen kann, da es kein Member im eigentlichen sinne ist.

das "this" in dem kontext verwirrt mich extrem...

Re: [C#] Was ist das? O.o

Verfasst: 17.02.2013, 17:45
von Artificial Mind
Das ist ein Indexer, quasi eine Überladung des [...]-Operators.

Benutzen tut man das dann so:

Code: Alles auswählen

ColorAttachments obj;
obj[5] = new Texture2D(...); // Ruft intern den setter von "this[int index]" auf, mit index = 5 in diesem Fall.
Die funktionieren genauso wie normale getter und setter, nur dass man eben noch diese Zugriffsparameter hat.
Das bedeutet nicht, dass das Objekt ein Array ist. Es kann sich nur so ähnlich verhalten.

Re: [C#] Was ist das? O.o

Verfasst: 17.02.2013, 17:56
von Herror
wow, ok. Danke.
Hast mir da ein stück weitergeholfen.

Ich wühle mich mal durch den Code um zu sehen wie der Autor sich das gedacht hat wie man sowas verwenden soll.

Das ist echt abgefahren... Ich glaube ich sollte mir ein C# buch zulegen :lol:
In C++ erscheint mir alles irgendwie logisch und schlüssig, aber C# ist irgendwie komisch...

Re: [SOLVED] [C#] Was ist das? O.o [Indexer]

Verfasst: 17.02.2013, 18:09
von Artificial Mind
Kein Problem.

Das ist reine Gewöhnungssache. Ich konnte C# sehr gut bevor ich mit C++ richtig angefangen habe und dann eckt man in C++ überall an. Mittlerweile kann ich beides, da ist das nicht so schlimm, aber ich glaube neue Sprachen sind immer erstmal sehr ungewohnt.