假设我有一个 C# 中的 BankBalance 类,它定义了一个函数 DebitTransaction。 DebitTransaction 执行以下操作。 如果余额>要借记的金额,则会借记该金额并通知调用者操作成功。否则它会通知调用者操作失败。
下面是 C# DLL 中的代码如下
using System;
namespace BankSystem
{
public class BankBalance
{
public int Balance { get; set; } = 1000;
// Define a delegate that informs the caller about the transaction status
public delegate void DebitTransactionStatus(string message);
public void DebitTransaction(int Debit, DebitTransactionStatus debitTransactionStatus)
{
if (Balance >= Debit)
{
Balance -= Debit;
debitTransactionStatus("Amount is Debited Successfully");
}
else
{
debitTransactionStatus("Not enough balance to perform debit operation");
}
}
}
}
下面的代码是请求借方操作的调用者(C# exe调用C# DLL函数DebitTransaction)。
using System;
using BankSystem;
namespace Transaction
{
class DebitTransaction
{
static void ShowDebitTransactionStatus(string message)
{
Console.WriteLine(message);
}
static void Main(string[] args)
{
BankBalance bankBalance = new BankBalance();
BankBalance.DebitTransactionStatus debitTransactionStatus = new BankBalance.DebitTransactionStatus(ShowDebitTransactionStatus);
bankBalance.DebitTransaction(500, debitTransactionStatus);
bankBalance.DebitTransaction(600, debitTransactionStatus);
}
}
}
上面的程序有效,这是输出
金额已扣款成功
余额不足,无法进行借记操作
我需要从 powershell 调用 C# DLL 函数 DebitTransaction 函数(调用 C# 委托并注册回调)以获得类似的结果
这对我来说是一个很大的帮助,因为我是一名 C++/C# 开发人员,但由于我们公司缺乏资源,现在在 PowerShell 中做自动化工作。我也是 PowerShell 的新手。 (我正在开发的项目有许多具有委托和回调的导出函数)
我尝试了几个链接,但这些链接对我不起作用。 https://renenyffenegger.ch/notes/Microsoft/dot-net/namespaces-classes/System/Delegate/CreateDelegate/example-PowerShell/index
ScriptBlock
转换为 DebitTransactionStatus
委托,稍微更新演示代码,使其与 C# 5 兼容并在 Windows PowerShell 5.1 中编译。这是它的样子:
Add-Type @'
namespace BankSystem
{
public class BankBalance
{
private int _balance = 1000;
public int Balance
{
get { return _balance ;}
set { _balance = value; }
}
// Define a delegate that informs the caller about the transaction status
public delegate void DebitTransactionStatus(string message);
public void DebitTransaction(int Debit, DebitTransactionStatus debitTransactionStatus)
{
if (Balance >= Debit)
{
Balance -= Debit;
debitTransactionStatus("Amount is Debited Successfully");
}
else
{
debitTransactionStatus("Not enough balance to perform debit operation");
}
}
}
}
'@
$balance = [BankSystem.BankBalance]::new()
$balance.DebitTransaction(1000, { param($message) Write-Host $message })
# Amount is Debited Successfully
$balance.DebitTransaction(1000, { param($message) Write-Host $message })
# Not enough balance to perform debit operation