Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

Consumare da C# codice Delphi non-CLS

Abbiamo visto nel post precedente come il compilatore Delphi crea una classe finta per ogni unit così che anche il codice procedurale soddisfi la regola CLS 36. Cosa succede invece quando non gli lasciamo più spazio agli trucchi e trasgrediamo in modo esplicito una regola CLS, per esempio la CLS Rule 11 (quella sulla signature)? Potremmo da C# "consumare" un codice come quello di seguito? (al tipo Word di Delphi corrisponde in C# il tipo ushort, non CLS)

// DelphiCls.pas
library DelphiCls;

uses
Foo in 'Foo.pas';

// inutile: Delphi non è CLS-compliant
[assembly: CLSCompliant(True)]

begin
end.

// Foo.pas
unit Foo;

interface

// non ha una signature conforme al CLS
function BadArgType(i: Word): Word;

implementation

function BadArgType(i: Word): Word;
begin
  Result := i + 1;
end;

end.

La risposta è sì:

// C#
using System;
class Test
{
  static void Main()
  {
    ushort i = 2;
    Console.WriteLine(Foo.Units.Foo.BadArgType(i)); // scrive 3
    Console.Read();
  }
}

Qualcuno sa perché, prima che arrivi il giovedì?

Print | posted on martedì 30 novembre 2004 02:27 | Filed Under [ Carillon .NET CLS ]

Powered by:
Powered By Subtext Powered By ASP.NET