2012-07-19 77 views
1

我有一個我使用的外部程序集,並且出於任何原因它沒有指定CLS合規性。所以,這會導致我的很多代碼被標記爲非cls兼容。我遇到的問題如下:在抽象方法中使用non-cls兼容類型

public abstract class SomeClass 
{ 
    //Compiler Error CS3011 
    [CLSCompliant(false)] 
    public abstract object SomeMethod(ExternalNonCompliantType arg); 
} 

public abstract class SomeClass 
{ 
    //Argument type 'External.ExternalNonCompliantType' is not CLS-compliant 
    public abstract object SomeMethod(ExternalNonCompliantType arg); 
} 

CS3011:

類成員不能既是抽象的,不符合 公共語言規範(CLS)。 CLS規定所有 級別的成員應執行。

我真的不知道在這裏做什麼?

回答

2
  • 什麼是預期的使用,你正在寫的代碼?
  • 你能把你的整個裝配件作爲[CLSComplaint(false)]嗎?

如果你的程序集也不符合,那麼你應該可以使用這種類型的代碼。您也可以嘗試將一個類標記爲不符合標準。我一直標記整個組件。

如果這只是您的代碼,並且您沒有將其作爲庫分發,那麼這不應該成爲問題,您也不必擔心CLS遵從性問題。

一個例外是,如果你正在編寫內部的東西,你希望能夠在各種其他CLR語言如F#,vb.net,ironpython,boo,M,scala等中重用。那就是可能並非如此;大多數應用程序只是 - 應用程序。

+0

問題不在於「我的代碼是否應該符合CLS?」 – Jodrell 2012-07-19 10:12:49

+1

我正在編寫一個我計劃分發的庫,並且我希望我的庫符合CLS標準。我會贊成,因爲將整個班級標記爲不符合要求的建議會使警告消失,這是有道理的。我只是希望有更好的方法。 – 2012-07-19 10:14:07

+0

如果你正在寫一個圖書館,那麼是的,我認爲它很重要:)大多數人不。實際上,如果預期的消費者使用相同的語言(c#),那麼使用它就不會有問題,但對於任何下線的人員都必須標記爲非cls兼容,這並不好。 – 2012-08-10 02:50:20