Frage von DerTod99, 26

Wie erlaube ich bei generics nur Instanzen eines anderen generics?

Hallo,

ich hab bei mir in der Arbeit gerade ein Problem mit generics. Ich hab zwei Klassen wers genau wissen will einmal eine die von DataGridViewTextBoxColumn abgeleitet ist und eine die von DataGridViewTextBoxCell abgeleitet ist.
Jetzt brauche ich für diese Klassen noch eine weitere um farbige DataGridView Zellen darzustellen.
Ich hab mir nun gedacht erb ich halt von den entsprechenden Klassen und füg den Code für die farbigen Zellen hinzu. Das ging aber nicht so einfach deshalb habe ich jetzt generische Klassen die abhängig von einander sind. Also gibt es jetzt DataGridViewTextColumn<T> und DataGridViewTextAbstractCell<U>. Jetzt erzeugt DataGridViewTextColum aber Instanzen von DataGridViewTextAbstractCell und DataGridViewTextAbstractCell von
DataGridViewTextColum. Also will ich jetzt sagen das T nur vom Typ DataGridViewTextAbstractCell ist und andersherum. Aber ist das irgendwie möglich das ich mit where T : sage das nur Instanzen dieser Klasse erzeugt werden dürfen aber es noch unbestimmt lasse von welchem Typen der generic im generic ist.
Wär nett wenn ihr mir helfen könntet wenn ihr überhaupt geblickt habt was ich meine, das bezweifle ich grad n bisschen.

Danke für alle antworten

Antwort
von KnusperPudding, 17

Generics ist nie ein sonderlich leichtes Thema, bis zu dem Zeitpunkt bei dem man es verstanden hat. Bei dieser Frage ist es auch nicht sonderlich leicht zu verstehen was bezweckt werden soll (sorry). 

Aber soweit ich das verstanden habe: Du hast eine Rückgabe von DataGridViewTextAbstractCell und du willst eine Rückgabe von DataGridViewTextBoxCell?

Ich gehe mal davon aus, dass DataGridViewTextBoxCell von dem DataGridViewTextAbstractCell  ableitet. - D.h. sofern du dann explizit deine TextboxCell haben willst, dürfte dir eigentlich ein cast ausreichen, oder? - Wenn ich dich soweit verstanden habe, wäre zu dem Zeitpunkt Generics nichts was dir weiter helfen würde.

Kommentar von DerTod99 ,

Danke für die Antwort das mit dem cast Is glaub ich leider nich so einfach da müsst ich ja mitten durch die basisklasse schneiden und das hab ich jetzt nich vor bei unsrem Framework xD. Auf jeden fall hab ich jetzt einfach die beiden columns von einer Klasse abgeleitet und die textcolorcell von der textboxcell. So hats dann einigermaßen geklappt. Muss da morgen nochmal drüber schauen. Alter fängt man vor 4 Monaten seine Ausbildung an und muss dann schon was im Framework machen -_-.

Kommentar von KnusperPudding ,

Hab ehrlich gesagt geantwortet weil ich weiß dass Generics in jeder Sprache ein eher unangenehmes Thema ist - weil's eben Hauptsächlich um Programmier-Komfort geht, nicht um Funktionalität und sich deshalb nicht all zu viele damit befassen.

Eigentlich habe ich unter C# noch nicht so viel gemacht, meine Stärke wären eher Java-Generics gewesen. Da aber die Basis der Generics dieselbe ist, hatte ich gehofft ich könne ein wenig helfen.

Bei meiner Ausbildung war es ähnlich. Nur dass man mir aufgrund meiner Änderungen diese Art von Aufgabe relativ schnell entzogen hat.

Aber jetzt mal blöd gefragt: Unter C# ist es doch genauso möglich folgendes zu machen, oder?

List<String> list = new ArrayList<String>();

Deklariert wird ein Interface oder eine Abstrakte Klasse, deren Methoden man benötigt. Instanziiert wird dann die gewünschte Implementierung der Klasse, z.B. Arraylist, was wiederum von List ableitet.

Genau dasselbe könnte nämlich die Lösung für dein Problem sein, dann wären deine Framework-Anpassungen eher im geringen Rahmen. - Nachdem ich euer Framework nicht kenne, und jetzt jetzt auch mal davon ausgehe, da es sich um Code deiner Firma handelt, dass du nur ungern den Source postest (was ich durchaus verstehe). Kann ich dir entweder den Tipp soweit geben, oder alternativ du stellst ein kleines davon abgeleitetes Beispiel bereit was das Problem umschreibt.

Kommentar von DerTod99 ,

Ja das ist möglich ich versteh nicht zu hunderprozent was du meinst. Dafür müsst ich ja dann auch die Erzeugung der Instanz anpassen und ich hab kp wo das passiert. Außerdem hängen da noch mehr controls dran. Ich glaub das es totaler Mist war das ich die Zellen auch mit gennerics machen wollte. Ich hätte eher die columns mit generics machen sollen und die Zellen mit Vererbung dann sollte es funktionieren. Evtl. mach ich des jetzt noch schnell wenn mein Chef einverstanden Is xD

Kommentar von KnusperPudding ,

Ich würde zu deinem jetzigen Wissensstand Generics noch außen-vor lassen. Das Thema ist absolut nicht leicht, da wäre es wohl eher besser in den 'Standard-Aufgaben' etwas mehr Routine rein zu bekommen, bevor man das anfasst. - Sofern du irgendwann mal erneut das Thema generics ansprichst mit einem wirklich brauchbaren Anwendungsfall, werd' ich auch wieder versuchen zu helfen.

Ich denke soweit wird das jetzt erstmal für dich klappen, alles Gute.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten