首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >提供.NET方法作为委托回调

提供.NET方法作为委托回调
EN

Stack Overflow用户
提问于 2011-04-03 23:30:05
回答 3查看 4.5K关注 0票数 18

将.NET方法作为委托回调传递给PowerShell中的.NET对象的语法是什么?

例如:

C#:

代码语言:javascript
复制
public class Class1
{
    public static void MyMethod(Action<object> obj)
    {
         obj("Hey!");
    }
}

public class Class2
{
    public static void Callback(object obj)
    {
         Console.Writeline(obj.ToString());
    }
}

PowerShell:

代码语言:javascript
复制
[Class1]::MyMethod([Class2]::Callback)

这不管用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-04 02:14:23

通过Adam's和Oisin的聊天的工作代码。

代码语言:javascript
复制
Add-Type -Language CSharpVersion3 -TypeDefinition @"
using System;

public class Class1
{
    public static void MyMethod(Action<object> obj)
    {
         obj("Hey!");
    }
}

public class Class2
{
    public static void Callback(object obj)
    {
         Console.WriteLine(obj.ToString());
    }
}
"@

$method   = [Class2].GetMethod("Callback") 
$delegate = [System.Delegate]::CreateDelegate([System.Action[Object]], $null, $method)

[Class1]::MyMethod($delegate)
票数 13
EN

Stack Overflow用户

发布于 2011-04-04 02:15:02

代码语言:javascript
复制
$code = @'
using System;
public class Class1
{    
    public static void MyMethod(Action<object> obj)    
    {
        obj("Hey!");    
    }
}
public class Class2
{    
    public static void Callback(object obj)    
    {         
        Console.WriteLine(obj.ToString());    
    }
}
'@

Add-Type -TypeDefinition $code -Language CSharpVersion3

[class1]::mymethod([system.action]::CreateDelegate('System.Action[Object]', [class2].getmethod('Callback')))
票数 4
EN

Stack Overflow用户

发布于 2011-04-04 00:56:20

[Class2]::Callback的类型是System.Management.Automation.PSMethod,它显然不能被内核转换为所需的委托。

我不确定这是否是解决任务的最好方法(我还没有看到任何关于这方面的官方文档),但下面的代码在这个示例中适用于我,在我的实践中也适用于其他类似的情况:

代码语言:javascript
复制
[Class1]::MyMethod({ [Class2]::Callback($args[0]) })

内核能够将我们的脚本块{ [Class2]::Callback($args[0]) }转换为所需的委托。

附注:虽然与这个问题没有直接关系,但这是该技术的另一个实际示例:在正则表达式中使用脚本块作为匹配求值器委托:How to sort by file name the same way Windows Explorer does?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5530522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档