1

オブジェクト インスタンスの存在しないメソッドまたはプロパティにアクセスした後、ホストされた IronPython エンジンにスクリプトの実行を再開させる方法はありますか? 通常、残念ながらスクリプトの実行を中断する例外がスローされます。

ほぼ同じメソッドとプロパティを実装するスコープ内のいくつかの異なる C# クラス (クラス A とクラス B など) のインスタンスを使用して、IronPython スクリプトを実行します。ただし、クラス A は、両方のクラスで共有されるものに加えて、より多くのメソッドとプロパティを実装します。

クラス A は、スクリプトがアクセスするこのクラスのメソッドが存在する必要があるため、例外をスローしたままにする必要があります。そうでない場合は、実際にスクリプトに問題があります。

ただし、クラス B は視覚化のみを目的としているため、IronPython は、このクラスには存在せず、クラス A に存在するメソッドの呼び出しを無視またはスキップして、実行を続行できます。

何か案が?どうもありがとう!

4

1 に答える 1

1

DynamicObject からクラス B を継承し、スクリプトを実行するメソッドのパラメータ タイプとしてdynamicを使用し、クラス B でこれを行う

    public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
        base.TryInvokeMember(binder, args, out result);
        return true;
    }

    public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
        base.TryInvoke(binder, args, out result);
        return true;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        base.TryGetMember(binder, out result);
        return true;
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        base.TrySetMember(binder, value);
        return true;
    }

私が求めていたものを達成することができました。存在しないメソッドまたはプロパティへのすべての呼び出しは、この方法で無視されます。発信元に関係なく。ただし、既存のメソッド/プロパティへの呼び出しは通常どおり機能します。

于 2013-01-08T09:14:48.070 に答える