16

クラス名:MyAssembly.MyClass+MyOtherClass

問題は明らかに+、従来のドットではなく、セパレータとしての機能と、他のセパレータが存在するかどうかを確認するための公式ドキュメントを見つけることです。

4

2 に答える 2

23

これは、ネストされた型を表す方法です。したがって、たとえば:

namespace Foo
{
    class Outer
    {
        class Nested {}
    }
}

Foo.Outer+Nestedコンパイルされたコードにフルネームのタイプを作成します。(typeof(Outer.Nested).FullNameたとえば、それが返されます。)

これが指定された動作なのか、それともMicrosoft C#コンパイラが使用することを選択したのかは私にはわかりません。これは、通常のC#では+を含むクラスを明示的に宣言できないという点で「言いようのない」名前であるため、コンパイラーは、他のクラスと衝突しないことを認識しています。C#3仕様のセクション10.3.8は、私が見る限り、コンパイルされた名前を指示していません。

編集:Type.AssemblyQualifiedNameネストされた型名の前に「+」が使用されることを指定しているのを見たばかりですが、それが実際に必要なのか、それとも従来型なのかはまだはっきりしていません。

于 2010-03-14T18:41:05.567 に答える
12

これは、コンパイラがメタデータでネストされたクラスを表すために使用するものです。

すなわち

class A { class B {} }

として見られるだろう

class A+B

メタデータ内

于 2010-03-14T18:40:13.663 に答える