2009-12-01 37 views
50

我發現了很多關於CLS合規性的頁面。我爲什麼要編寫符合CLS的代碼?

我瞭解,CLS遵從:

許多peolple寫, 「如果你寫的代碼,你應該寫它符合CLS。」 但據我所知,沒有理由在通用軟件中使用CLS合規性。

我說得對嗎,還是我錯過了什麼?

+0

相關https://stackoverflow.com/questions/570452/what-is-the-clscompliant-attribute-in-net – 2017-10-24 07:53:25

回答

41

如果您編寫一個庫或框架,確保您的庫可以從任何CLR語言中使用是有意義的。

+0

CIL(通用中間語言)是不夠的? – Luca 2009-12-01 20:17:51

+4

afaik否,因爲CIL可能包含某些CLR語言無法使用的功能。例如。你有一個採用UInt32參數的方法,CIL代碼很好,但是該方法不能從沒有無符號概念的語言中調用。 – 2009-12-01 20:25:13

+0

會發生什麼情況是語言在CIL中「翻譯」(當然有源代碼)?在這種情況下,似乎只有傳統組件才需要CLS合規性,對吧? – Luca 2009-12-01 20:29:25

11

有可能沒有特定有理由讓您的代碼符合CLS,但人們稱它爲「最佳實踐」 - 您應該這樣做,因爲這是一種好習慣,而不是可測量的更適合特定場景。

換句話說,這是一個好主意使你的代碼符合CLS,除非你有充分的理由不

10

答案是允許跨.NET語言的最大兼容性。 CLS是允許C#程序集與F#,Iron Python,C++/CLI,VB.NET,Boo和所有其他.NET語言一起工作的通用語言。跨越邊界並且您的組件可能正常工作,但不一定。

32

如果您正在分發庫,CLS遵從性尤其重要 - 特別是,編寫符合CLS標準的保證您的庫可以被所有CLS兼容語言使用。

例如,Visual Basic不區分大小寫,而C#是。 CLS合規性的要求之一是公共(和受保護)成員名稱不應僅因大小寫而有所不同,從而確保您的庫可以安全地使用Visual Basic代碼或任何其他不基於案件。

+0

還有一條規則,你不能用下劃線開始成員。這讓我想知道如何命名一個受公共屬性包裝的受保護變量......不能使用小寫版本,不能使用下劃線......下一個醜陋的選擇是什麼? – 2011-10-12 10:44:31

+0

可能在前綴爲p。不漂亮,但功能。雖然我更喜歡C#屬性而不是Java風格的getter和setter,但至少在Java中,命名約定更容易。 – Dathan 2011-10-14 11:55:14

+0

不知何故,當所有的事情都說完之後,java最終變得更簡潔。不過,我認爲它可能比語言更多的是圖書館。 – 2011-10-15 22:38:28

相關問題