Esiste una regola CLS (CLS Rule 36) che dice: "Global static fields and methods are not CLS-compliant". Visto questo, vi aspettate che il seguente codice in Delphi for .NET sia CLS-compliant? Senza una classe, senza niente... :-)
// Delphi for .NET
library Foo;
uses
SysUtils;
procedure DoSomething(msg: String);
begin
Console.WriteLine(msg)
end;
begin
end.
Ebbene, sì! Il compilatore di Delphi for .NET, appunto per la conformità al CLS, trasforma la "procedura" DoSomething in un metodo static di una classe Foo sotto il namespace (se lo inventa lui) Foo.Units. E possiamo benissimo utilizzare la "procedura" DoSomething in C#:
// C#
class Test
{
static void Main()
{
Foo.Units.Foo.DoSomething("Ciao");
System.Console.Read();
}
}
Ecco perché la mia sessione di giovedì si chiama "CLS: regole per compilatori e per sviluppatori". Perché un po' di lavoro per la conformità al CLS lo fanno anche i compilatori, non solo gli sviluppatori :-)