日期:2014-05-19  浏览次数:20983 次

CLSCompliantAttribute属性为何不能单独用于类
看下面这段代码
using   System;
namespace   ConsoleApplication1
{
///   <summary>
///   Class1   の概要の説明です。
///   </summary>
[CLSCompliant(true)]
class   myClass
{

public   uint   abc()
{
uint   a,   b;
a   =   0;
b   =   2;
return   a   +   b;
}
///   <summary>
///   アプリケーションのメイン   エントリ   ポイントです。
///   </summary>
[STAThread]
static   void   Main(string[]   args)
{
                    Console.WriteLine( "OK ");
}
}
}

编译时出现下面的ERROR:
F:\study\VS_Pro_Book\C#\ConsoleApplication1\ConsoleApplication1\Class1.cs(7):   アセンブリが準拠するとされていないため、 'ConsoleApplication1.myClass '   を   CLS   準拠とすることはできません。

我有些不太明白:CLSCompliantAttribute属性的应用范围是所有的程序元素,为什么上面的写法会出错,请各位大虾指点一下。




------解决方案--------------------
首先要有[assembly: System.CLSCompliant(true)],说明下程序集是CLS兼容还是CLS不兼容(不兼容使用false),然后你才可以定制在类中是否支持CLS兼容。

例如:
AssemblyInfo.cs 中有
[assembly: System.CLSCompliant(true)]

然后在类中
[CLSCompliant(false)]
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}

public void frmMain_load(object sender, EventArgs e)
{
}

public void frmMain_Load(object sender, EventArgs e)
{
}
}
无警告。
如果去掉[CLSCompliant(false)]则有警告。