在抽象方法中使用非cls兼容类型

时间:2012-07-19 09:43:00

标签: c# code-analysis abstract cls-compliant

我有一个我使用的外部程序集,无论出于何种原因它都没有指定CLS合规性。因此,这会导致我的许多代码被标记为非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指定所有   班级成员应实施。

我真的不确定该怎么做......

1 个答案:

答案 0 :(得分:2)

  • 您正在编写的代码的预期用途是什么?
  • 您可以将整个程序集作为[CLSComplaint(false)]吗?

如果您的程序集也不兼容,那么您应该可以使用这种代码。您还可以尝试将一个类标记为不合规。我总是只标记整个组件。

如果这只是您的代码,并且您没有将其作为库分发,那么它不应该是一个问题,您不必过于担心CLS合规性。

唯一的例外是,如果你在内部写一些你期望能够在各种其他CLR语言中重复使用的东西,比如F#,vb.net,ironpython,boo,M,scala等等。不是这样;大多数应用只是 - 应用程序。