The SLAR on System.CLSCompliantAttribute
In honor of generics getting into the CLS, I thought I’d get back to the series sharing some of the information in the .NET Framework Standard Library Annotated Reference Vol 1 here is an annotation from the System.CLSCompliantAttribute class.
Brad Abrams: Unfortunately, we codified the naming convention for acronyms too late to
fix this one. It should have been ClsCompliantAttribute rather than CLSCompliantAttribute.
Notice that this attribute is just a marker intended for compilers to enforce. The runtime
does not enforce any CLS-compliance rules.
Jeffrey Richter: Note that the CLS only applies to publicly exposed members so compilers generally
only check CLS-compliance of types and members that are exposed outside of an assembly.
Internal types and private methods, for example, are not checked for CLS compliance.
Some sample code:
using System;
[assembly: CLSCompliant(true)]
namespace Samples
{
public class CLSCompliantSample
{
public static void Main()
{
}
public static uint Method1(uint i)
{
return i;
}
}
}
The compiler output is:
Microsoft (R) Program Maintenance Utility Version 7.00.9466
Copyright (C) Microsoft Corporation. All rights reserved.
csc /debug CLSCompliantAttribute.cs
Microsoft (R) Visual C# .NET Compiler version 7.00.9466
for Microsoft (R) .NET Framework version 1.0.3705
Copyright (C) Microsoft Corporation 2001. All rights reserved.
CLSCompliantAttribute.cs(12,32): error CS3001: Argument type 'uint' is not
CLS-compliant
CLSCompliantAttribute.cs(12,19): error CS3002: Return type of
'Samples.CLSCompliantSample.Method1(uint)' is not CLS-compliant
NMAKE : fatal error U1077: 'csc' : return code '0x1'
Stop.