Generics (nur best. Typen erlauben)



  • Ok nun stellt sich mir die frage, das nur Klassen als einschränkung verwenden werden können. Ist es möglich das ich sage nur "uint,int,bool,byte" sind erlaubt?



  • in c# sind alles klassen - von daher ist es egal ob du
    uint, int, bool, byte usw verwendest, das sind auch nur "typedefs" zu
    UInt, Int32, Boolean, Byte



  • Marco K. schrieb:

    Jupp das geht !!!

    class Beispiel<T> where T : String {
    
    public T _dt{get;private set}
    ...
    }
    

    Nun aktzeptiert die Klasse nur noch Strings bzw. Klassen die von String abgeleitet wurden.

    Die will ich sehen. 😉



  • Ne geht leider nich :

    class Beispiel<T> where T : Int32 {
    
    public T _dt{get;private set}
    ...
    }
    

    Compiler fehler:

    Fehler 1 "int" ist keine gültige Einschränkung. Ein Typ, der als Einschränkung verwendet wird, muss eine Schnittstelle, eine nicht versiegelte Klasse oder ein Typparameter sein. C:\Documents and Settings\Operator\My Documents\Visual Studio 2008\Projects\TagLib\TagLib\Program.cs 77 48 TagLib



  • Vielleicht hilft es dir, dein constraint auf IConvertable einzuschränken? 😕



  • schau mal hier: http://stackoverflow.com/questions/32664/c-generic-constraint-for-only-integers unten siehst du zwei vorschlaege wie es gehen koennte



  • Mr Evil schrieb:

    in c# sind alles klassen - von daher ist es egal ob du
    uint, int, bool, byte usw verwendest, das sind auch nur "typedefs" zu
    UInt, Int32, Boolean, Byte

    Nein, in C# sind nicht alles Klassen. Noch ein Wort zu Constaints: Es werden erlaubt: class (für alle Referenztypen), struct (für alle Valuetypen), new() (vorhandensein von Parameterlosem c'tor gewährleistet), Interfaces (alle Typen die das Interface implementieren), Basisklassen (alle Typen, oder die Klasse selbst, die von Basisklasse erben), Typargument.

    Was heißt das? Man kann nicht auf einen Typ einschränken und Typen die sich nicht ableiten lassen (sealed Klassen, oder Valuetypen) gehen schonmal garnicht.



  • class Beispiel<T> where T : Int32 {
    
    public T _dt{get;private set}
    ...
    }
    
    class Beispiel {
    
    public Int32 _dt{get;private set}
    ...
    }
    


  • David_pb schrieb:

    [...]

    Was heißt das? Man kann nicht auf einen Typ einschränken und Typen die sich nicht ableiten lassen (sealed Klassen, oder Valuetypen) gehen schonmal garnicht.

    Auf einen Typ einschränken macht ja auch wenig Sinn. Warum sollte man dann überhaupt eine Generic-Klasse verwenden?

    Edit: Habe die zweite Seite übersehen, der Knuddlbaer hatte es schon vorgemacht.



  • hajb schrieb:

    David_pb schrieb:

    [...]

    Was heißt das? Man kann nicht auf einen Typ einschränken und Typen die sich nicht ableiten lassen (sealed Klassen, oder Valuetypen) gehen schonmal garnicht.

    Auf einen Typ einschränken macht ja auch wenig Sinn. Warum sollte man dann überhaupt eine Generic-Klasse verwenden?

    Eben!


Anmelden zum Antworten