Generics und Binary Writer Problem:



  • folgender code:

    class BaseTypex<tTYPE>{
    
            BinaryReader m_br = null;//new BinaryWriter();
            BinaryWriter m_bw = null;
    
            object m_objDat = null;
    
            void SetToStream(ref MemoryStream ms)
            {
                m_bw= new BinaryWriter(ms);
                m_bw.Write((tTYPE)m_objDat); //FEHLER tTYPE kann nich in String konvertiert werden!! 
            }
            void GetToStream(ref MemoryStream ms)
            {
                m_br= new BinaryReader(ms);
                m_objDat= m_br.ReadString();
            }
            tTYPE Get()
            {
                return (tTYPE)m_objDat;
            }
            void Set(tTYPE dat)
            {
                m_objDat= dat;
            }
        }
    

    EDIT Shit liegt wohl an dem ReadString.. naja dann kann ich das ding eh sovergessen wie ichs mir dachte



  • Was zum teufel machst du da? C++ in C# programmieren? Das klappt nicht.

    Du scheinst nichtmals zu wissen, das Klassen grundsätzlich referenzartig sind. Dein ref macht absolut keinen Sinn.

    Zu deiem Fehler: Guck dir die Signatur von Write an. Du wirst sehen es gibt keine Überladung, die mit jedem Typen arbeitet (sprich object). Generics sind etwas ganz anders, als C++'s templates!
    C++ Tempaltes sind mehr oder weniger Textersetzungen; es wird pro Typ eine Version erstellt und wenn das was dabei rauskommt irgendwie Sinn macht kompiliert es. Generics sind anders. Es gibt nur genau ein "BaseTypex" (aus Optimierungsgründen generiert die CLR spezialisierte Varianten für Value-types, aber das ist für die Betrachtung unerheblich). Über tTYPE (verwendest du einen Zufallsgenerator zum Generieren deiner Bezeichner?) ist absolut nichts bekannt. Du kannst damit also genau das machen, was du auch mit object machen kannst (ToString, Equals, GetHashCode). Willst du mehr, kannst du den Typ auf Subtypen bestimmter Interfaces einschränken und/oder bestimmte Konstruktor-Signaturen vorrausetzen (siehe Schlüsselwort where).

    Das als minimaler Einstieg in die Grundlagen von C#.


Anmelden zum Antworten