PowerShell 能够通过Get-Members
cmdlet 枚举给定 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