10. oktober 2006 - 08:55Der 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?
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); } } }
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 :-)
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.