1

PowerShell 能够通过Get-Memberscmdlet 枚举给定 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# without BindingFlags

4

0 回答 0