Avatar billede dehdar Nybegynder
18. maj 2009 - 11:53 Der er 4 kommentarer og
1 løsning

interface problemer

Hej, jeg har problemer med at forstå, hvorfor følgende ikke kan lade sig gøre. Dette er hvad jeg gør.

Jeg har et interface.

    interface _inf
    {
        string MyFunction();
    }

Og en klasse, som arver mit interface.

    class _test : _inf
    {
        string _inf.MyFunction()
        {
          return("Hej");
        }
    }

Så har jeg en xaml.cs fil i mit WPF projekt, hvor jeg ikke kan referere til instansen af min klasse Test gennem mit interface.

public partial class testklasse: Window
    {
            _test obj1 = new _test ();
            _inf obj2 = (_inf)obj1 ; // <--- linje 2: Fejl!
            ...
    }

I linje to får jeg følgende fejlmeddelelse:

Error 1: A field initializer cannot reference the non-static field, method or property '...'

Jeg kan dog få det til at virke fint, hvis jeg placerer ovenstående kode i en metode af testklasse. Altså fungerer følgende kode fint.

public partial class testklasse: Window
    {
            ...

        private void MouseClickEvent()
        {
            _test obj1 = new _test ();
            _inf obj2 = (_inf)obj1 ;
        }
    }

Er der nogen som kan forklare, hvorfor?

På forhånd tak.
Avatar billede sirius Nybegynder
18. maj 2009 - 13:28 #1
prøv med
_inf obj2 = new _test ();
Avatar billede aaberg Nybegynder
18. maj 2009 - 15:29 #2
Du kan ikke sætte et objekt lig med et andet objekt på klassen. Det skal gøres i en metode. Så enten gør du som sirius skriver:

_inf obj = new _test();

ellers gør du det i konstruktøren:

public partial class testklasse: Window
{
    _test obj1;
    _inf obj2;

    public testklasse()
    {
        obj1 = new _test();
        obj2 = (_inf)obj1;
    }
}
Avatar billede aaberg Nybegynder
18. maj 2009 - 15:38 #3
Grunden til at du ikke kan gøre det på klasseniveau, er at klassen kun skal indeholde deklarationer. En klasse definere altså objektet. Når du skriver:

public partial class testklasse: Window
{
    _test obj1 = new _test ();
}


bliver det oversat af compileren til:


public partial class testklasse: Window
{
    _test obj1;
   
    public testklasse()
    {
        _test = new _test ();
    }
}

Det vil altså sige, at selv om du på klasseniveau sætter obj1 til at være en ny instans af klassen _test, så bliver variablen først sat når der oprettes en instans af klassen. Derfor kan du ikke på klasseniveau skrive:
_inf obj2 = (_inf)obj1;

da obj1 ikke er sat til en instans.

Gav det mening? ellers skal du bare spørge.
Avatar billede dehdar Nybegynder
18. maj 2009 - 17:43 #4
Tak for svarene.

Aaberg det gav rigtig god mening, smid et svar og tak for hjælpen.
Avatar billede aaberg Nybegynder
18. maj 2009 - 18:42 #5
:-)
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