Heim >Backend-Entwicklung >C++ >Warum implementieren C#-Arrays „IList' nicht direkt und wie sieht es immer noch aus?

Warum implementieren C#-Arrays „IList' nicht direkt und wie sieht es immer noch aus?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-04 17:56:39259Durchsuche

Why Don't C# Arrays Directly Implement `IList`, and How Do They Still Seem To?

Arrays in C#: Ein tieferer Einblick in die Schnittstellenimplementierung

Obwohl Arrays in C# IList zu implementieren scheinen, stellen sie die Count-Eigenschaft nicht öffentlich zur Verfügung. Dies mag wie ein Widerspruch zu den C#-Schnittstellenimplementierungsregeln erscheinen.

In Wirklichkeit implementieren Arrays System.Collections.IList, nicht System.Collections.Generic.IList. Generische Schnittstellen wie IList kann nicht durch nicht generische Typen wie Array implementiert werden.

Die CLR generiert jedoch spezifische Array-Typen, die diese Schnittstellen möglicherweise implementieren könnten. Aber selbst für diese konkreten Array-Typen ist die Umwandlung in IEnumerable funktioniert, während das Abrufen der Schnittstellenzuordnung eine Ausnahme auslöst.

Dies liegt an der „quacks-like-a-duck“-Eingabe, bei der der Compiler und die CLR Arrays als IList implementierende Arrays erkennen. Die Umwandlungsanweisung wird von einer versteckten Wrapper-Klasse System.SZArrayHelper verarbeitet, die eine Implementierung von IList bereitstellt. über das Array.

Auch wenn die Count-Eigenschaft nicht explizit implementiert ist, stellt die CLR einen internen Getter bereit, der eine Umwandlung in das T[]-Array verwendet.

Dieses Verhalten ist zwar etwas unkonventionell, ermöglicht es aber für eine nahtlose und effiziente Implementierung von IList für Arrays. Es handelt sich um eine clevere Technik, die die verborgenen Mechanismen in C# und der CLR aufzeigt, die zu ihrer Flexibilität und Leistungsfähigkeit beitragen.

Das obige ist der detaillierte Inhalt vonWarum implementieren C#-Arrays „IList' nicht direkt und wie sieht es immer noch aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn