Wie Arrays in C# IList teilweise implementieren
Obwohl die Count-Eigenschaft von IList nicht öffentlich deklariert wird, sind Arrays in C# Es kann in Betracht gezogen werden, das teilweise umzusetzen Schnittstelle.
Implementierungsdetails
Obwohl Arrays IList nicht direkt implementieren, erstellt die Common Language Runtime (CLR) einen konkreten Array-Typ, der tatsächlich implementiert Schnittstelle. Diese Implementierung ist jedoch mit herkömmlichen Mitteln nicht erkennbar.
Konkret verwendet die CLR eine systemdefinierte Klasse namens System.SZArrayHelper, um die zugrunde liegende Implementierung von IList bereitzustellen. für Arrays. Diese Implementierung umfasst die Count-Eigenschaft, die intern an die Length-Eigenschaft des Arrays delegiert.
Verwendungsbeispiel
Um ein Array in IList umzuwandeln, wird die Der Compiler generiert IL-Code, der mithilfe der castclass-Anweisung eine Umwandlung durchführt. Die CLR verwendet dann die SZArrayHelper-Klasse, um die Schnittstellenimplementierung bereitzustellen.
Einschränkungen
Die teilweise Implementierung von IList by arrays bringt einige Einschränkungen mit sich. Wenn Sie beispielsweise versuchen, die GetInterfaceMap-Methode für einen Array-Typ aufzurufen, wobei der Schnittstellenparameter auf IList führt zu einer „Schnittstelle nicht gefunden“-Ausnahme.
Auswirkungen
Die Implementierung von IList durch Arrays über SZArrayHelper ist ein Fall von Quacksalber-Typisierung, bei der die CLR die Illusion vermittelt, dass das Array die Schnittstelle implementiert, obwohl dies nicht explizit der Fall ist. Dies ermöglicht die Verwendung von Arrays als IList Objekte, ohne dass ein benutzerdefinierter Adapter erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie implementieren C#-Arrays teilweise die IList-Schnittstelle?. 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