Get-Members
PowerShell には、コマンドレットを介して CLSID GUID を指定して、オブジェクトのメソッドとプロパティを列挙する機能があります。例えば:
$test = [activator]::CreateInstance([type]::GetTypeFromCLSID("2735412C-7F64-5B0F-8F00-5D77AFBE261E"))
$test | Get-Member
これにより、次の出力が得られます。PowerShell 出力
C# 内で同じメソッドを使用すると、異なる結果が得られます。次のコードを使用して、オブジェクトのメソッド、プロパティ、およびメンバーを列挙しています。
Guid key = Guid.Parse("2735412C-7F64-5B0F-8F00-5D77AFBE261E");
Object instance = Activator.CreateInstance(Type.GetTypeFromCLSID(key));
MethodInfo[] methods = instance.GetType().GetMethods(BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.ExactBinding | BindingFlags.Public | BindingFlags.NonPublic);
PropertyInfo[] props = instance.GetType().GetProperties(BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.ExactBinding | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
ConstructorInfo[] consts = instance.GetType().GetConstructors(BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.ExactBinding | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
MemberInfo[] members = instance.GetType().GetMembers(BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.ExactBinding | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
foreach (MemberInfo member in members)
{
Console.WriteLine(member.Name);
}
これにより、次の出力が得られます。C# 出力
なぜそれがそれほど大きな違いなのかについてのアイデア。PowerShell の出力は素晴らしいですが、C# でも同じことを行う必要があります...
編集 1: Get メソッドから BindingFlags.* を削除すると、出力は次のようになりますC# BindingFlags なし