Avatar billede Slettet bruger
05. marts 2008 - 09:57 Der er 13 kommentarer og
2 løsninger

ToDouble() Metode

Hej eksperter.

Jeg ønsker at lege lidt med metoder og kunne godt se brugen af en

int test = 1;
double dblTest;

dblTest = test.ToDouble();

Men jeg er lidt i tvivl om hvordan jeg skal gribe det an.
Avatar billede hmortensen Nybegynder
05. marts 2008 - 10:10 #1
Du kan gøre sådan her:
int test = 1;
double dblTest = Convert.ToDouble(test);

Ellers forstår jeg ikke hvad du vil opnå.
Avatar billede powerpunk Nybegynder
05. marts 2008 - 10:10 #2
Kan du ikke bare lave et helt almindeligt cast?

int test = 1;
double dblTest;

dblTest = (double)test;
Avatar billede powerpunk Nybegynder
05. marts 2008 - 10:12 #3
Rent faktisk eksisterer cast fra int til double også implicit således at...

  int test = 1;
  double d = test ;

...er gyldig kode...

Den anden vej skal der castes eksplicit.
Avatar billede Slettet bruger
05. marts 2008 - 10:50 #4
jeg vil lave en overloaded metode i stil med ToString() metoden.

eksemplet med int til double var bare et eksempel.

det kunne lige så vel være fra string til double. (Glem exception)
Avatar billede hmortensen Nybegynder
05. marts 2008 - 11:46 #5
Grunden til at ToString kan overrides er at den findes i System.Object, som alle objecter nedarver fra.

Men kan stadig ikke helt se hvad det er du vil.
Prøv at komme med et rigtigt eksempel.

Hvis du vil tilføje metoder til en allerede eksisterende type, kan "extension methods" måske være løsningen (blev introduceret i C# 3.0).
Avatar billede winners79 Nybegynder
05. marts 2008 - 11:49 #6
class EnKlasse
{
  public static implicit operator double(string s)
  {
      if (!s.Equals("tal"))
          return 0;
      else
          return 42;
  }
}
Avatar billede nielle Nybegynder
05. marts 2008 - 19:33 #7
I C# 3.0 kan du gøre det du viser, men kun med de allerede nævnte extension metoder:

    static class EnIntExtender
    {
        public static double ToDouble(this int etTal)
        {
            return (double)etTal; // bruger en explictit cast ...
            // return etTal;  ... men kunne laves med en implicit cast
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int test = 1;
            double dblTest;

            dblTest = test.ToDouble();
        }
    }

Det viste eksempel er dog relativt trivielt, og kamouflere egentlig blot den almindelige cast funtionalitet.

...

Meeen. Når du så snakker om ToStrign() så er det noget andet du er ude i. ToString() kan kun overloades fordi at den allerede er erklæret "virtual" i den klasse hvor den oprindeligt er defineret (System.Object). Hvis du vil lave noget ligenende med andre metoder så skal de også væere erklæret virtual.

I sagesn natur er det jo ikke noget som du kan ænder så meget på for de allerede definerede klasser/structrs som int, double eller string.

Du kan kun gøre det for klasser du selv definere:

    class Klasse1
    {
        private readonly int etTal;
        public Klasse1(int etTal)
        {
            this.etTal = etTal;
        }

        public virtual double ToDouble()  // Her bruges virtual
        {
            return etTal;  // Implicit cast
        }
    }

    class Klasse2 : Klasse1
    {
        public Klasse2(int etTal) : base(etTal)
        { }

        public override double ToDouble()
        {
            return 2 * base.ToDouble();
        }
    }
Avatar billede Slettet bruger
09. marts 2008 - 12:43 #8
Hmortensen:

Dette er hvad jeg vil:

            //Eksempel med brug af ToString() metoden
           
            int hello = 1;
            string s = hello.ToString();

            // Egen metode skulle kunne gøre dette.

            decimal ohMyGod = 2.145;
            double d = ohMyGod.ToDouble();

            string bummer = "6.663";
            double t = bummer.ToDouble();
Avatar billede hmortensen Nybegynder
09. marts 2008 - 15:37 #9
Så er det extension methods du skal kigge på.
Avatar billede nielle Nybegynder
24. marts 2008 - 22:33 #10
Er du kommet videre med denne her?
Avatar billede Slettet bruger
23. april 2008 - 08:40 #11
Ja nielle det er jeg. Jeg havde dog lidt problemer med at få extentions til at virke efter hensigten, men det lykkedes endeligt i går. Så læg et svar nielle, hmortensen kan også lægge et svar da det var ham der foreslog extentions men ikke med kode :)
Avatar billede nielle Nybegynder
23. april 2008 - 18:24 #12
Svar :^)
Avatar billede hmortensen Nybegynder
23. april 2008 - 18:32 #13
Og svar :)
Avatar billede Slettet bruger
24. april 2008 - 15:22 #14
Slut prut finale
Avatar billede nielle Nybegynder
24. april 2008 - 17:38 #15
Takker for point :^)
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