Avatar billede mikl-dk Nybegynder
10. oktober 2006 - 08:55 Der er 2 kommentarer og
1 løsning

Klasse med implementation af IEnumerable og implicit casting

Hej,

Jeg spekulerer over følgende scenario:
Lad C være en klasse, der dels implementerer IEnumerable-interfacet (fra System.Collections) og dels vha. overloading definerer en implicit casting til et array. Hvis man nu gennemløber en instans af klassen i en foreach-løkke, vil IEnumerable-implementeringen blive benyttet, eller vil der først blive forsøgt med en implicit casting, og derefter benytte denne nye types IEnumerable-implementering?

/mikl-dk
Avatar billede nielle Nybegynder
10. oktober 2006 - 17:53 #1
Interessant spørgsmål. :^)

Svaret er at det er IEnumerable-implementeringen der "vinder":

En demo:

namespace e737657
{
    class Program
    {
        static void Main(string[] args)
        {
            // Hvad IEnumerable-implementeringen giver:
            C c1 = new C();
            foreach (int o in c1)
            {
                Console.WriteLine(o);
            }

            // Hvad den implicit'e cast ville give:
            int[] c2 = c1;
            foreach (int o in c2)
            {
                Console.WriteLine(o);
            }
        }
    }

    class C: IEnumerable
    {
        int[] arr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 };

        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < arr.Length; i++)
                yield return arr[i];
        }

        public static implicit operator int[](C c)
        {
            return new int[] { 1, 2, 3, 4 };
        }
    }
}
Avatar billede mikl-dk Nybegynder
10. oktober 2006 - 19:41 #2
Hej,

Tak for svaret.

Ahhh, det var lige tricket med "int[] c2 = c1;", jeg ikke havde fået med i egen test, så kunne ikke rigtigt bøje armen om på ryggen af programmet, som jeg ønskede :-)

Smid et svar og pointene er dine.
Avatar billede nielle Nybegynder
10. oktober 2006 - 19:43 #3
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