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

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Herror
Beiträge: 97
Registriert: 24.12.2009, 23:13
Benutzertext: Ewiger Anfänger....
Alter Benutzername: Herror
Echter Name: Artur Schütz
Kontaktdaten:

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

Beitrag 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.
Zuletzt geändert von Herror am 17.02.2013, 17:59, insgesamt 2-mal geändert.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

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

Beitrag 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
Benutzeravatar
Herror
Beiträge: 97
Registriert: 24.12.2009, 23:13
Benutzertext: Ewiger Anfänger....
Alter Benutzername: Herror
Echter Name: Artur Schütz
Kontaktdaten:

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

Beitrag 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...
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

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

Beitrag 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.
Benutzeravatar
Herror
Beiträge: 97
Registriert: 24.12.2009, 23:13
Benutzertext: Ewiger Anfänger....
Alter Benutzername: Herror
Echter Name: Artur Schütz
Kontaktdaten:

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

Beitrag 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...
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

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

Beitrag 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.
Antworten