.net - 如何使用脚本从类中获取重载定义?
问题描述
如何使用脚本从类中获取重载定义?
我已经通过命令行尝试过,它可以工作。
Assembly=[appdomain]::currentdomain.GetAssemblies() | Where-Object Location -match 'FileNet.API'
$Class=$Assembly.GetModules().gettypes()
$Constructors=$Class.GetMembers()| where-object {$_.IsConstructor -eq $True}| where-object {$_.IsPublic-eq $True}
foreach ($constructor in $Constructors) {
$myconstructor=$constructor.DeclaringType.ToString()
[type]$mytype=$constructor.DeclaringType
"========================================="
$myconstructor
"========================================="
$Members=($mytype.DeclaredMembers).Name
foreach ($Member in $Members) {
$mytype::$Member.OverloadDefinition
}
}
但是,这在命令行上有效
$mytype::FetchInstance.OverloadDefinitions
static FileNet.Api.Core.IDomain FetchInstance(FileNet.Api.Core.IConnection conn, string name, FileNet.Api.Property.PropertyFilter filter)
解决方案
该::
运算符仅适用于公共静态方法。
如果您想要一个类型的所有构造函数和方法定义,请考虑挂钩到DotNetAdapter
在后台生成这些重载定义的类型:
function Get-MethodOverload
{
param(
[Parameter(Mandatory = $true)]
[type]$Type
)
# Obtain a reference to the DotNetAdapter class
$NetAdapter = [psobject].Assembly.GetType('System.Management.Automation.DotNetAdapter')
# Obtain a reference to the GetMethodInfoOverloadDefinition method
$OverloadResolver = $NetAdapter.GetMethod('GetMethodInfoOverloadDefinition',[System.Reflection.BindingFlags]'Static,NonPublic')
# start with constructors
foreach($ctor in $Type.GetConstructors())
{
$OverloadResolver.Invoke($null,@($ctor.Name,[System.Reflection.MethodBase]$ctor,0))
}
# then methods
foreach($method in $Type.GetMethods())
{
$OverloadResolver.Invoke($null,@($method.Name,[System.Reflection.MethodBase]$method,0))
}
}
现在您可以将自定义类传递给函数,它会返回重载定义:
$Assembly = [appdomain]::CurrentDomain.GetAssemblies() | Where-Object Location -match 'FileNet.API'
$Class = $Assembly.GetTypes() | Where-Object Name -eq 'MyClass'
Get-MethodOverload -Type $Class
推荐阅读
- java - BeanNameAware 的用例
- python - Matplotlib 动画没有显示任何情节
- c - How to convert a character array to a decimal integer array?
- php - Laravel 5.3 从数据库结果创建多维数组
- multithreading - 多线程等待一个线程使用哪种同步模型
- python - 在文件中搜索单词并取整行
- powershell - 在 GWMI 过滤器中输出 PSComputerName
- c# - 如何从一维 int 数组返回数字网格?
- python - 如何使用 statsmodels 和 sklearn 在回归中添加控制变量?
- python - 如何在其定义的函数中使用类变量?