2010-08-13 14 views

Odpowiedz

41

W pliku AssemblyInfo.cs, to prawdopodobnie ma wiersz, który czyta

[assembly:CLSCompliant(true)] 

Jeśli tak, to muszą być spełnione następujące zasady. (Copy-Pasta z http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/)

  1. Niepodpisane typy nie powinny być częścią publicznego interfejsu klasy. Oznacza to, że pola publiczne nie powinny mieć typów bez znaku, takich jak uint lub ulong, publiczne metody nie powinny zwracać typów bez znaku, parametry przekazywane do funkcji publicznej nie powinny mieć typów bez znaku. Jednak typy bez znaku mogą być częścią prywatnych członków.

  2. Niebezpieczne typy, takie jak wskaźniki, nie powinny być używane z członkami publicznymi. Jednak można ich używać z prywatnymi członkami.

  3. Nazwy klas i członków nie mogą się różnić tylko w zależności od ich przypadku. Na przykład nie możemy mieć dwóch metod o nazwie MyMethod i MYMETHOD.

  4. Tylko właściwości i metody mogą być przeciążone, Operatory nie powinny być przeciążone.

+0

Niepodpisane typy mogą być częścią publicznego interfejsu, jeśli nie ujawniają żadnej funkcji, której kod napisany w języku bez użycia niepodpisanych typów mógłby być niemożliwy do użycia.Na przykład metoda przechowania 32-bitowej wartości bez znaku w czterech kolejnych bajtach mogłaby poprawnie zawierać przeciążenia zarówno dla "UInt32" i "Int64", a klasa mogłaby zapewnić metodę konwertowania czterech kolejnych bajtów na 'UInt32', jeśli także pod warunkiem, że zwróci tę samą wartość, co "Int64". – supercat

5

To jest stare pytanie, ale pomyślałem, że lepsze wyjaśnienie należy się przyszłym śledczym (takim jak ja).

Po pierwsze, linki w innych odpowiedziach podają bardzo szczegółowo przyczynę tego ostrzeżenia.

Jednak, podsumowując, kod napisany dla Common Language Runtime (taki jak C#) jest zgodny z CLS, jeśli może współpracować z innymi językami zaprojektowanymi dla CLR. Oznacza to, że niektóre typy danych specyficzne dla języka, które nie są wspólne dla całego środowiska wykonawczego, nie są zgodne. Szybkim i łatwym rozwiązaniem w odniesieniu do zmiennych i metod jest nadanie im modyfikatora widoczności internal, który określa, że ​​metoda, klasa, właściwość itd. Nie jest widoczna poza złożeniem, dla którego jest tworzony. To powinno być zrobione tylko na tych przedmiotach, których nie potrzebujesz lub chcesz użyć poza zgromadzeniem; dla tych, które mają być widoczne, użyj typów danych zgodnych z CLS.

Powiązane problemy