Delphi for .NETは、Delphi言語のクラス変数(クラス型への参照を保持できる)、仮想クラスメソッド、および仮想コンストラクター(クラス参照を介して呼び出される)の概念を実装しました。これらはいずれもCLRに直接類似していません。CLRの静的メソッドを仮想にすることはできず、コンストラクターを仮想にすることはできません。
CLRには実行時型情報が豊富に含まれているため、これらのアーティファクトはCLRで厳密に必要とされるわけではありません。コンパイル時に正確な型を知らないコードで実行時に型のインスタンスを構築したい場合は、リフレクションまたは他の手法を使用してそれを行うことができます。Delphi言語のこれらの機能は、実行時型情報が制限されているネイティブにコンパイルされたWin32製品から生まれました。これはすべて、DLRのようなものが登場するずっと前に、.NET1.0および1.1に実装されていました。
これらのDelphi言語機能は、リフレクションを使用してCLRでエミュレートできますが、パフォーマンス上の理由から、Delphiで宣言されたすべてのクラスタイプのサイドカーである「メタクラス」タイプを作成することにより、ILで直接実装することを選択しました。DelphiコードがDelphiクラスタイプをクラス参照変数に割り当てた場合、対応するメタクラスのシングルトンインスタンスを変数に割り当てるためのILコードを生成しました。クラス参照変数を介した仮想メソッド呼び出しは、メタクラスインスタンスでのIL仮想メソッド呼び出しとしてコード生成され、対応するクラスタイプの実際の静的メソッド実装にバウンスされました。これにより、クラス仮想メソッド呼び出しは、実行時のパフォーマンスコストを最小限に抑えながら、多態的に動作し(呼び出しに使用されるインスタンスのタイプに適した実装を呼び出すことができます)、
これらの仮想クラスメソッドの機能は、Delphi構文で宣言されたクラスにのみ適用可能であり、Delphi構文でのみ使用できます。Delphiで作成されたクラスを使用するときに、他の.NET言語が(ほとんどの場合)それらを無視するように、メタタイプは非CLS準拠としてマークされていると思います。他の.NET言語は、これらのDelphi固有の言語機能を利用できませんでした(開発者が実際に決定され、醜い名前のメタクラスを介して適切な呼び出しを行うために足場を登っていない限り)
一般に、他の言語があなたの言語によって/のために作成された非CLSアーティファクトを利用することを期待するべきではありません。他の言語で自分の言語で作成されたものを利用したい場合は、CLS準拠の用語で合理的な方法で表現できる方法で特別なソースを表現する方法を理解する必要があります。特製タレの性質によっては、それができない場合があります。
Delphi仮想クラスメソッドは、通常の静的メソッドとして他の.NET言語で使用できました。主にCLS(または他の言語)が概念を表現できないため、多形性は他の.NET言語に公開されませんでした。
理想的には、すべての言語が考えられるすべての構成を等しくうまく表現できるでしょう。しかし実際にはそうではありません。一部のグラフ関数はデカルト座標で表現するのが簡単ですが、他のグラフ関数は極座標を使用することで大幅に簡略化されています。同じことがプログラミング言語にも当てはまります。
CLRに実装されている場合でも、独自の言語で新しい表現手段を発明することは問題ありません。言語のコードが他の人から呼び出されることを期待する場合は、言語の外部で作業するプログラマーにとって、型がどのように見えるかを明確に定義してください。あなたの実装には二重性があります:あなたの言語のユーザーに物事がどのように見えるか、そしてあなたの言語の外のユーザーに物事がどのように見えるかです。
脚注:これは、.NET用の新しいDelphi製品であるDelphiPrismには当てはまらないと思います。DelphiPrismは仮想クラスメソッドをサポートしていないと思います。