PowerShell如何获取类继承场景下基类定义的所有属性列表
原因说明
PowerShell 中的[MyBase]$O1强制类型标注属于静态类型提示,仅作用于语法分析阶段(也就是你看到的IntelliSense提示逻辑),不会修改对象本身的实际运行时类型——你的实例本质上还是MyExtended类的对象,所以运行时直接访问、或者用Get-Member默认读取的都是对象实际类型的全量成员,自然能获取到子类的ExtendedAttrib属性。
获取和IntelliSense一致的基类属性列表
你可以直接通过基类的反射元数据读取定义的成员,和IntelliSense的判断逻辑完全一致:
- 如果你只需要基类的所有属性名:
[MyBase].GetProperties( [System.Reflection.BindingFlags]::Public -bor [System.Reflection.BindingFlags]::Instance ).Name
- 如果你需要基于现有实例筛选出仅基类定义的属性,可以结合反射结果过滤
Get-Member的输出:
# 先取基类定义的所有属性名 $basePropNames = [MyBase].GetProperties( [System.Reflection.BindingFlags]::Public -bor [System.Reflection.BindingFlags]::Instance ).Name # 过滤实例的属性列表,仅保留基类定义的部分 ([MyBase]$O1) | Get-Member -MemberType Property | Where-Object Name -in $basePropNames
如果需要进一步限制运行时也无法访问子类属性,你可以基于基类属性列表把实例封装成PSCustomObject,常规场景下直接读取类型元数据已经能满足需求。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

