メソッド、クラス、構造体、型など、別の言語から直接呼び出すことができないものを1つの.NET言語で作成することは完全に可能です。間接的に(たとえば、リフレクションによって)呼び出すことは常に可能です。
つまり、コンパイルされたC#プロジェクトを見ると、コンパイルされたコードには、通常はジェネリックスをサポートするために、奇妙な名前と文字が含まれているコードが含まれていることがわかります。そのような名前の1つは<Module>
(角かっこを含む)です。これは、パブリックメソッドにされたとしても、C#から直接呼び出すことはできません。
CLR用にコンパイルすることを決定した言語設計者は、パブリック型の最小限のサブセットをサポートする必要があります。これはCLSコンプライアンスと呼ばれ、一般的な命名規則、パブリックポインター、パブリックの安全でないメンバーまたはクラス、大文字と小文字のみが異なる名前、パブリック静的フィールド、およびその他のルールに関するものです。彼らがこの規則に従うとき、他の.NET言語があなたのメソッドを呼び出すことができることが保証されます。このためのルールが適切にレイアウトされ、文書化されているため、彼らはこれを行う方法を知っています。
非準拠のC#コードを作成することもできます。(通常は)コンパイルされますが、準拠しているすべての言語がメソッドを呼び出すことができるとは限りません。同じことが、C++。NETを含む他のほとんどの言語にも当てはまります。これは、アセンブリをデフォルトでCLS準拠としてマークするためのMicrosoft設計ガイドラインです(C ++、VB、Rubyで記述されているかどうかは関係ありません)。