Avatar billede repsak Nybegynder
12. august 2004 - 11:48 Der er 16 kommentarer og
1 løsning

Implementer og arv

Dette spørgsmål burde være piece of cake, så derfor synes jeg ikke at det fortjener mere end 8 points ;)

Hvad er syntaksen for
public class MyClass : MyClass2, MyInterface{
}

altså hvordan arver og implementerer man i samme linje. Mit problem er at ovenstående compiler fint, også selvom MyInterface's metoder ikke er implementeret/defineret
Avatar billede erikjacobsen Ekspert
12. august 2004 - 11:50 #1
Kan du så sige new til din MyClass ?
Avatar billede arne_v Ekspert
12. august 2004 - 11:51 #2
Og det er ikke fordi at MyClass2 implementerer de metoder ?
Avatar billede finger Nybegynder
12. august 2004 - 12:16 #3
har du prøvet at bytte om på rækkefølgen af klassen og interfacet?
Avatar billede repsak Nybegynder
12. august 2004 - 12:16 #4
MyClass2 implementerer inerfacet, men det konkrete problem består i at jeg når jeg smider skidtet på nettet så siger compileren at mit object ikke er serialiserbart (ISerializable)
(ja, jeg kan sige new til MyClass)
Avatar billede repsak Nybegynder
12. august 2004 - 12:18 #5
finger -> jeps, men den går ikke :-(

men jeg kan forstå på jer at syntaksen er i orden. Så må problemet ligge et andet sted. Hmmm
Avatar billede arne_v Ekspert
12. august 2004 - 12:18 #6
Når MyClass2 implementerer MyInterface og MyClass arver fra MyClass2, så arver
MyClass også de metoder fra MyClass2 der skal til for at implementerer interfacet.

Det forklarer den manglende fejl.
Avatar billede arne_v Ekspert
12. august 2004 - 12:19 #7
Er alle felter i din klasse serialiserbare ?
Avatar billede repsak Nybegynder
12. august 2004 - 12:20 #8
arne -> jeps, men det der undrer mig er at klassen ikke genkendes som serialiserbar
Avatar billede repsak Nybegynder
12. august 2004 - 12:21 #9
såden ser MyClass2 ud:
public abstract class Abs_User : ISerializable {
    private string name;
    private string id;

    public string Name{
        get{return name;}
        set{name = value;}
    }

    public string Id{
        get{return id;}
        set{id = value;}
    }

    public void GetObjectData(SerializationInfo info, StreamingContext ctxt){
        info.AddValue("Name", Name);
        info.AddValue("Id", Id);
    }
}
Avatar billede arne_v Ekspert
12. august 2004 - 12:24 #10
Jeg plejer at bruge attributten [Serializable] men jeg ved ikke om det gør
en forskel.
Avatar billede arne_v Ekspert
12. august 2004 - 12:25 #11
Child klassen har ikke nogle ikke serialiserbare felter ?
Avatar billede repsak Nybegynder
12. august 2004 - 12:29 #12
ok - har ikke arbejdet med attributter... :(

her er childklassen
public class User_Pupil : Abs_User, ISerializable {
    private string class_;
    private string letter;

    public string Class{
        get{return class_;}
        set{class_ = value;}
    }

    public string Letter{
        get{return letter;}
        //value skal kun indeholde én karakter
        set{letter = value[value.Length-1].ToString();}
    }

    //public void GetObjectData(SerializationInfo info, StreamingContext ctxt){
    //    base.GetObjectData(info, ctxt);
    //    info.AddValue("Class", Class);
    //    info.AddValue("Letter", Letter);
    //}
}
Avatar billede arne_v Ekspert
12. august 2004 - 12:58 #13
Prøv med attribut.
Avatar billede repsak Nybegynder
12. august 2004 - 23:02 #14
Hmm får stadig fejlen:

Unable to serialize the session state. Please note that non-serializable objects or MarshalByRef objects are not permitted when session state mode is 'StateServer' or 'SQLServer'.
...
[SerializationException: The type Portfolio.Shared.User_Pupil in Assembly Portfolio.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null is not marked as serializable.]

med koden

[Serializable]
public abstract class Abs_User{
    private string name;
    private string id;
...
Avatar billede arne_v Ekspert
12. august 2004 - 23:20 #15
Altså når jeg sætter [Serializable] på *begge* klasser så virker det hos mig:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public abstract class Abs_User {
    private string name;
    private string id;

    public string Name{
        get{return name;}
        set{name = value;}
    }

    public string Id{
        get{return id;}
        set{id = value;}
    }
}

[Serializable]
public class User_Pupil : Abs_User {
    private string class_;
    private string letter;

    public string Class{
        get{return class_;}
        set{class_ = value;}
    }

    public string Letter{
        get{return letter;}
        //value skal kun indeholde én karakter
        set{letter = value[value.Length-1].ToString();}
    }
}

class MainClass
{
    public static void Main(string[] args)
    {
        User_Pupil x = new User_Pupil();
        x.Class = "abc";
        x.Letter = "def";
        x.Id = "ghi";
        x.Name = "jkl";
        BinaryFormatter bf = new BinaryFormatter();
        FileStream outf = File.Create("C:\\x.ser");
        bf.Serialize(outf, x);
        outf.Close();
        FileStream inf = File.OpenRead("C:\\x.ser");
        User_Pupil x2 = (User_Pupil)bf.Deserialize(inf);
        Console.WriteLine(x2.Class + " " + x2.Letter + " " + x2.Id + " " + x2.Name);
    }
}
Avatar billede repsak Nybegynder
12. august 2004 - 23:49 #16
Du gør det igen arne :-D
jeg havde kun attribut på superklassen. Når jeg tilføjer på subklasserne virker det.
Det må være fair hvis jeg forhøjer pointssatsen for dit arbejde.
Tak for det
Avatar billede arne_v Ekspert
12. august 2004 - 23:50 #17
Jeg ligger et svar så
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester