何DeclaringTypeを持っていないし、私は2番目のnullチェックで混乱していたfollowing codeはConstructorInfoはそうMSDNに行き、私は<a href="https://github.com/dotnet/corefx" rel="nofollow">GitHub</a>にSystem.Linq.Expressionsソースコードを閲覧した
public static NewExpression New(ConstructorInfo constructor, IEnumerable<Expression> arguments)
{
ContractUtils.RequiresNotNull(constructor, nameof(constructor));
ContractUtils.RequiresNotNull(constructor.DeclaringType, nameof(constructor));
// ...
}
を見つけたことができます。 ConstructorInfo.DeclaringTypeについて次のように述べました。
DeclaringTypeプロパティは、このメンバを宣言する型のTypeオブジェクトへの参照を取得します。型のメンバーは、型によって宣言されるか、基本型から継承されるため、DeclaringTypeプロパティによって返されるTypeオブジェクトは、現在のMemberInfoオブジェクトを取得するために使用されるTypeオブジェクトと同じでない場合があります。
このMemberInfoオブジェクトが取得されたTypeオブジェクトがこのメンバーを宣言しなかった場合、DeclaringTypeプロパティはその基本型の1つを表します。
MemberInfoオブジェクトがグローバルメンバーの場合(つまり、モジュールのグローバルメソッドを返すModule.GetMethodsメソッドから取得された場合)、返されるDeclaringTypeはnullになります。
したがって、DeclaringTypeは、MemberInfo(ConstructorInfoが派生するクラス)の場合、nullになる可能性があります。しかし、ConstructorInfoではnullかどうかは不明です。私の質問にそう
:
ConstructorInfo.DeclaringTypeが今までnullにすることはできますか?なぜSystem.Linq.Expressionsコードがそれをチェックしていますか?
DeclaringTypeにnullを設定できる場合は、例を挙げてください。
DeclaringTypeがnullでもかまいませんが、これはCLRがグローバルコンストラクタをサポートしていることを意味しますか? (私はこれを研究しようとしましたが、何かを見つけることができません)
3)はい - モジュールイニシャライザまたはモジュールコンストラクタを検索します – thehennyy