Avatar billede nidyahou Praktikant
12. marts 2009 - 20:06 Der er 5 kommentarer og
1 løsning

Overload metode intelligent

Hey. Jeg vil gerne overloade min metode på en hensigtsmæssig måde, fordi det er et "nested" overload (håber udtrykket er forståeligt når jeg demonstrerer).

Min metode ser ud som noget der ligner her:

MyFunc(string a, string b, string c){
MyFuncA(a);
MyFuncB(b);
MyFuncC(c);
}
MyFunc(int a, string b, string c){
MyFuncA(a)
MyFuncB(b);
MyFuncC(c);
}
MyFuncA(string a){
//dosomething with string
}
MyFuncA(int a){
//dosomething with int
}

skal jeg virkelig på alle planer lave overload, også når det handler om bare at give parameteret videre ned til næste funktion?? Hvordan ser det så ikke ud hvis jeg vælger at overloade både a,b og c.

Bryder jeg med nogle principper eller er der en metode hvorpå jeg kan kode mig ud af det rod?
Avatar billede arne_v Ekspert
12. marts 2009 - 20:22 #1
Jeg kan ikke lige se, hvordan du kan undgaa det. Det er jo forskellige metoder.

Maaske kunne du undgaa noget af overload ved at bruge generics !?!?
Avatar billede nidyahou Praktikant
12. marts 2009 - 20:31 #2
jeg har et overload der modtager List<InterfaceA> og en der modtager InterfaceA.

Selvfølgelig kunne jeg nøjes med List<InterfaceA>, men det kræver bare, at jeg inded jeg kalder metoden skal have et System.Collections.Generics.List<>.

Det du siger er, at det er bedre at tage "the hazzle" med at oprette en List og så bare tilføje et listitem istedet for at lave overloads?
Avatar billede arne_v Ekspert
12. marts 2009 - 20:38 #3
Nu var det jo saa ikke helt det eksempel du postede.

Men med den problem stilling ville jeg helt klart noejes med en List<> og lade den kaldende kode create en List<> (det er ogsaa blevet nemmere i 3.5).
Avatar billede nidyahou Praktikant
12. marts 2009 - 20:59 #4
copy that - nej det var det self ikke, men det var fordi jeg havde håbet på at man kunne sende et udefineret object videre som i

if (x == y) then
uObj = Iperson
else
uObj = List<Iperson>
end if

MyFunc(uObj, a, b)
MyFuncU(uObj)
MyFuncA... osv..

anyways tak for din hjælp - drop et svar
Avatar billede arne_v Ekspert
13. marts 2009 - 01:23 #5
Det kan du godt.

using System;
using System.Collections.Generic;

namespace E
{
    public class Program
    {
        public static void Test(object o)
        {
            string s = null;
            if(o is string)
            {
                s = (string)o;
            }
            else if(o is List<string>)
            {
                s = ((List<string>)o)[0];
            }
            Console.WriteLine(s);
        }
        public static void Main(string[] args)
        {
            Test("foo");
            Test(new List<string>{ "bar" });
            Console.ReadKey();
        }
    }
}

men det vil jeg ikke anbefale.

Du vil ihvertfald skulle iklædes mindst 40 kg panser plader til code review for at overleve !!
Avatar billede arne_v Ekspert
13. marts 2009 - 01:23 #6
Og et 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