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
C#-Quelltext |
|
1 2 3 4 5 |
public class EffectRGBParameterSlot : EffectParameterSlot<EffectRGBParameter> { // Hier steht kein erweiternder Code - nur ein paar mit der Basisklasse identische Konstruktoren } public abstract class EffectRGBParameter : EffectParameter<Color> { } |
C#-Quelltext |
|
1 |
public DoStaff(EffectParameterSlot<EffectParameter<Color>> Something); |
C#-Quelltext |
|
1 2 |
EffectRGBParameterSlot Slot = new EffectRGBParameterSlot(); DoStaff(Slot); |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Warum kann ich sowas nicht machen bzw. warum sagt mir der VSC 2015 Compiler, dass er EffectRGBParameterSlot nicht in EffectParameterSlot<EffectParameter<Color>> casten kann!? Die beiden Typen sind doch identisch, wenn ich die Templates ineinander einsetze? Oder frisst der Compiler das nicht, weil es keine C++ Typedefs, sondern "neue" Klassen sind!?
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (14.09.2015, 01:04)
Ich definiere also ein DataTemplate mit dem DataType EffectRGBParameterSlot und wenn dann ein EffectParameterSlot<EffectParameter<Color>> angezeigt werden soll, dann wird das DataTemplate benutzt!? Das glaube ich nicht, das wäre doch ein Up-Cast, der nicht möglich ist.Es reicht aber das EffectRGBParameterSlot direkt von EffectParameterSlot<EffectParameter<Color>> erbt damit es in XAML verwendbar ist.
Danke für die Info - jetzt weiß ich, warum ich bei der Eingabe von "C# Templates" nicht so super Sachen finde... Bei "C# Generics" sieht das schon viel besser aus!Es gibt keine Templates in C#. C# hat nur Generics;
OK, das hatte ich befürchtet! Es ist also kein C++-artiger typedef, sondern eine neue Klasse. Die "Using-Aliasen" habe ich eben ausprobiert - funktioniert ja ganz gut! Gibts ne Möglichkeit sowas zu machen:Nein, die beiden Typen sind nicht identisch. EffectRGBParameterSlot ist ein eigener Typ.
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Datei: EffectParameter.cs namespace ACALC { using EffectRGBParameter = EffectParameter<Color>; public abstract class EffectParameter<T> { // Code } } // Datei: EffectParameterSlot.cs namespace ACALC { public class SomeClass { public void DoStaff(EffectRGBParameter p) { // Code } } } |
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
OK, das hatte ich befürchtet! Es ist also kein C++-artiger typedef, sondern eine neue Klasse.Nein, die beiden Typen sind nicht identisch. EffectRGBParameterSlot ist ein eigener Typ.
Die "Using-Aliasen" habe ich eben ausprobiert - funktioniert ja ganz gut! Gibts ne Möglichkeit sowas zu machen [...] Da bekomme ich in der zweiten Datei eine Meldung, dass er EffectRGBParameter nicht kennt. Kann ich den Alias dateiübergreifend definieren?
Ich habe hier gelesen, dass ich ein Generic mithilfe einer neuen Klasse als DataType an ein DataTemplate übergeben kann. Eine weitere Seite (kann leider nicht wiederfinden ) hat das ganze auch als C++-artigen typedef bezeichnet. Dass das eigentlich nicht das gleiche sein kann, habe ich mir schon gedacht, nur ist der C# Compiler vielleicht so schlau zu merken, dass die neue Klasse genauso wie die Basisklasse ist und das dann als typedef zu interpretieren... (ja, das ist ein wenig naiv) Dass das in C++ so ist, weiß ich - mit C++ kenne ich mich auf dem Gebiet besser aus!Ich kann ehrlich gesagt nicht nachvollziehen, wie genau du überhaupt erst auf die Idee kommst, dass eine abgeleitete Klasse in C# sowas wie ein typedef sein könnte, das macht erstens und zweitens keinen Sinn und ist drittens doch auch in C++ schon nicht so!?
OK - danke für diese Aussage - meine Fragen sind jetzt erstmal geklärt denke ich! Dankeschön.Afaik gibt's leider keinen Weg, die in C# "Dateiübergreifend" zu machen.
Das mache ich jetzt auch mit einem TemplateSelector!Ich bin kein WPF Experte, aber ich möchte einfach mal anmerken, dass WPF eine ganz normale .NET Library ist, die man auch direkt in C# ansprechen kann. XAML ist praktisch, aber alles was man in XAML hinschreiben kann, kann man auch direkt in C# hinschreiben...
Sowas verwende ich doch garnicht!? Ansonsten: where T: kenne ich - immerhin etwas.Verwendung des CRTP
Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.
... und diese Signatur kürzer!
- übersichtlicher
- logischer
- verständlicher
Sowas verwende ich doch garnicht!?
Werbeanzeige