Avatar billede casper_skovgaard Nybegynder
18. juli 2005 - 16:26 Der er 12 kommentarer og
1 løsning

Specified cast is not valid ved nedarvning af metode

Jeg har nogle core klasser som jeg ønsker at udvide med nogle ekstra properties. Der for har jeg oprettet nogle custom klasser som arver fra core klasserne. Men der opstår et problem, som jeg ikke ved hvordan man løser. Her er koden:

namespace ClassTest.Core
{
    public class UserInfo
    {
        ...
        public string FirstName
        {
            ...
        }

        public string LastName
        {
            ...
        }
    }
}

namespace ClassTest.Core
{
    public class UserController
    {
        ...

        public UserInfo GetUser()
        {
            UserInfo ui = new UserInfo();
            ui.FirstName = "King";
            ui.LastName = "Kong";

            return ui;
        }
    }
}

namespace ClassTest.Custom
{
    public class UserInfo: ClassTest.Core.UserInfo
    {
        ...

        public string CompanyName
        {
            ...
        }
    }
}

namespace ClassTest.Custom
{
    public class UserController: ClassTest.Core.UserController
    {
        public UserController()
        {
        }

        public new UserInfo GetUser()
        {
->            UserInfo ui = (UserInfo) base.GetUser();
            ui.CompanyName = "Test123";

            return ui;
        }
    }
}

I linien med -> for jeg en Specified cast is not valid.

Hvordan løser jeg det problem?
Avatar billede arne_v Ekspert
18. juli 2005 - 16:51 #1
prøv:

ClassTest.Core.UserInfo ui = (ClassTest.Core.UserInfo) base.GetUser();
Avatar billede arne_v Ekspert
18. juli 2005 - 16:51 #2
men er virtual og override ikke lavet for at undgå den slags ??
Avatar billede arne_v Ekspert
18. juli 2005 - 17:12 #3
hm - det er nok slet ikke det du vil

jeg tror snarere at du skal lave en constructor med argument så du kan:

UserInfo ui = new UserInfo(base.GetUser());
Avatar billede casper_skovgaard Nybegynder
18. juli 2005 - 17:33 #4
ClassTest.Core.UserInfo ui = (ClassTest.Core.UserInfo) base.GetUser();
giver samme resultat.

UserInfo ui = new UserInfo(base.GetUser());
har jeg også tænkt på, men så opstår samme problem i constructor'en. Og jeg vil helst slippe for at kopiere hver enkelt property.
Avatar billede arne_v Ekspert
18. juli 2005 - 18:21 #5
du vil da vel ikke få samme problem i constructor ??
Avatar billede casper_skovgaard Nybegynder
18. juli 2005 - 20:10 #6
I constructoren skriver jeg følgende:

ClassTest.Core.UserController uc = new ClassTest.Core.UserController;
ClassTest.Core.UserInfo ui = uc.GetUser();

Men hvad gør jeg så derfra?
Avatar billede arne_v Ekspert
18. juli 2005 - 20:12 #7
I hvilken constructor ?
Avatar billede casper_skovgaard Nybegynder
18. juli 2005 - 21:35 #8
ClassTest.Custom.UserInfo constructor'en.

Hvad ville du skrive i constructoren?
Avatar billede arne_v Ekspert
18. juli 2005 - 21:40 #9
public UserInfo() : ClassTest.Core.UserInfo()
{
}

vel
Avatar billede casper_skovgaard Nybegynder
18. juli 2005 - 21:44 #10
ahh, nu ser jeg hvor du vil hen :)

Jeg afprøver det imorgen tidligt.
Avatar billede casper_skovgaard Nybegynder
19. juli 2005 - 09:15 #11
dvs. i custom UserInfo laver jeg følgende constructor?

public UserInfo( ClassTest.Core.UserInfo ui): base( ui)
{
}

det går desværre ikke, jeg kan ikke rette i core klasserne, og der findes ikke en constructor der passer til dette kald....

Har jeg misforstået noget?
Avatar billede casper_skovgaard Nybegynder
19. juli 2005 - 14:35 #12
Det ser ikke ud til at det er muligt at løse problemet uden at ændre core klasserne eller kopiere alle properties.

Arne, tak for hjælpen, smid et svar og pointene er dine :)
Avatar billede arne_v Ekspert
19. juli 2005 - 14:48 #13
det er korrekt

de Core klasser er tilsyneladende ikke lavet med arv for øje

og svar
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