Avatar billede moejensen Nybegynder
26. februar 2002 - 10:59 Der er 2 kommentarer og
1 løsning

An object reference is required for the nonstatic field, method,

Jeg har følgende kode i C#, som jeg får fejlen:

An object reference is required for the nonstatic field, method, 'InfoControl.deserializeObj()'

når jeg forsøger at kompilere det!

Jeg bruger et Singleton pattern for at sikre at der kun dannes ét objekt af typen InfoControl. I metodekaldet getInstance vil jeg, hvis objektet ikke er instantieret hente det fra en fil!

Det er ved metode kaldet deserializeObj() at jeg får fejlen!



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

[Serializable()]
public class InfoControl
{
    private static InfoControl instance;
    private Information[] info;
   
    public static InfoControl getInstance()
    {
        if (instance == null)
        {
            try
            {
                // try to deserialize the 'instance' object
                deserializeObj(); // ****** HER KOMMER FEJLEN ******               
            }
            catch(Exception e)
            {
                // if the deserialization fails
                Console.WriteLine("Der er oprettet et nyt objekt: " + e);
                instance = new InfoControl();
            }
        }
        return instance;
    }
   
    private InfoControl()
    {
        info = new Information[10];
        for(int i = 0; i < 10; i++)
        {
            info[i] = new Information(i);
        }
    }
   
    public string getOverskrift(int side)
    {
        return info[side].getOverskrift();
    }
   
    public string getBeskrivelse(int side)
    {
        return info[side].getBeskrivelse();
    }
   
    public void setOverskrift(int side, string tekst)
    {
        info[side].setOverskrift(tekst);
    }
   
    public void setBeskrivelse(int side, string tekst)
    {
        info[side].setBeskrivelse(tekst);
    }
   
    private void serializeObj()
    {
        //Opens a file and serializes the object into it in xml format.
        Stream stream = File.Open("Information.xml", FileMode.Create);
        SoapFormatter formatter = new SoapFormatter();
        formatter.Serialize(stream, instance);
        stream.Close();
    }
   
    private void deserializeObj()
    {
        //Empties reference.
        instance = null;
        //Opens file "information.xml" and deserializes the object from it.
        Stream stream = File.Open("information.xml", FileMode.Open);
        SoapFormatter formatter = new SoapFormatter();
        instance = (InfoControl)formatter.Deserialize(stream);
        stream.Close();
    }
}


// A test object that needs to be serialized.
[Serializable()]     
public class Information 
{
    public int side;
    public string overskrift;
    public string beskrivelse;
   
    public Information(int s)
    {
        side = s;
    }

    public void setOverskrift(string info)
    {
        overskrift = info;
    }
   
    public string getOverskrift()
    {
        return overskrift;
    }
   
    public void setBeskrivelse(string info)
    {
        beskrivelse = info;
    }
   
    public string getBeskrivelse()
    {
        return beskrivelse;
    }
}
Avatar billede jennemaan Nybegynder
26. februar 2002 - 11:15 #1
Hmm... umiddelbart vil jeg mene at det er fordi du kalder deserialize før du har instansieret instance?

/Jennemaan
Avatar billede moejensen Nybegynder
26. februar 2002 - 11:21 #2
Desvære så var det ikke det der skulle til!!
Avatar billede moejensen Nybegynder
26. februar 2002 - 11:24 #3
Jeg har selv løst problemet, jeg har sat metoden deserializeObj() til at være static!! Det var vist det der skulle til!!

private static void deserializeObj()
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
Kurser inden for grundlæggende programmering

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