Frage

ich zur Zeit lese Albahari 's C # 3.0 in a Nutshell und auf pg. 241, während reden über Array Indizierung, sagt er folgendes:

  

Nonzero-basierte Arrays sind nicht   CLS (Common Language Specification) -kompatiblen

Was bedeutet es genau, für Nicht-Null-Arrays nicht sein CLS-kompatibel ? Und welche Auswirkungen hat es auf Ihrem Code?

[Update]

Hier ist ein Link zu die Seite des Buches.

War es hilfreich?

Lösung

Die CLS (Common Language Specification) legt den Grundstein für eine gemeinsame Regeln für die Einhaltung, die die anderen Sprachen (VB.NET, F #, etc.) garantiert Baugruppen verwenden können, die Sie mit C # gebaut haben. Ein Nicht-Null-basierten Array wäre nicht kompatibel sein als andere Sprachen Arrays erwarten Null-Basis zu sein.

Hier ist ein Beispiel, das leichter zu verstehen:

class Foo
{
    public void Bar() { }
    public void bar() { } 
}

Diese Art würde nicht sein CLS-kompatibel, da es zwei Elemente enthält, die nur von Typ Namen unterscheiden. Wie würde jemand VB.NET disambiguate zwischen Bar und bar seit dem VB.NET-Compiler ist nicht abhängig?

Also im Grunde die CLS ist ein Bündel von Regeln, wie diese Interoperabilität zwischen den Sprachen zu gewährleisten.

Andere Tipps

CLS-Kompatibilität ist vor allem darum, sicherzustellen, dass der Code so breit kompatibel mit anderen Sprachen wie möglich ist. Es beinhaltet Dinge wie nicht öffentliche Mitglieder ausgesetzt wird, die nur von Fall unterscheiden (die VB verwirren würde, die Groß- und Kleinschreibung ist). Sehen Sie diese für weitere Informationen rel="noreferrer">, zusammen mit der Common language Specification selbst.

ich zusätzlich zu dem, was gesagt worden ist, ungleich Null-basierte Arrays besteht ausschließlich Übergang zu erleichtern VB6-Code für bestehende (vor allem durch das automatische Migration Tool), da in VB6, Array-Indizierung könnte aus einer beliebigen Zahl beginnen, die nicht unbedingt Null ist.

Durch das CLS-Kompatibilität Problem (und andere Erwägungen), ist es nicht immer sie in .NET empfohlen zu verwenden (auch wenn VB.NET Programmierung). Darüber hinaus ist ihre Verwendung eher beschränkt. Es ist nur einfacher, eine Offset-Übersetzung zu tun, indem das Array innerhalb einer Klasse einkapseln und einen entsprechenden Index-Zugriffsoperator schreiben.

Auch

Wenn Ihre Anwendung ist nicht beabsichtigt, mit anderen Programmen zu arbeiten -. Wie in es eine in sich geschlossene Einheit ist, dass Sie nicht als öffentliche Klassenbibliothek an andere Personen verkaufen, keine Sorge darüber zu viel

Aber auch die anderen Kommentare hier sind korrekt, wenn eine generische Klassenbibliothek zu entwickeln.

Es ist immer gut, die Praxis zu verwenden [assembly: CLSCompliant (true)]., Aber es ist nicht entscheidend Ihre Anwendung am Laufen zu bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top