主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C#: コンパイルされたIronPythonクラスを使う その2

                
前回:http://elicon.blog57.fc2.com/blog-entry-230.html

IronPythonスクリプトをコンパイルしてDLLにして、C#からIronPythonクラスを使う。2回目。
前回はIronPython Cookbookを参考にやってみたが、どうやら古いやり方だったようだ。C# 4からdynamicという型が加わり、だいぶやりやすくなっているらしい。前回はそもそもクラスを使うと言いながら、インスタンスも作成していなかった。今回はdynamic型を使いつつ、インスタンスの作成をする。

今回のやり方ではメソッドやプロパティへのアクセスが容易になっている。

ちなみにプロパティへのアクセスを簡便に済ますために__dict__を使ったが、Pythonの流儀ではこれは外道のようだ。その理由は以下で。
http://docs.python.jp/2/tutorial/classes.html

using System;
using System.IO;
using System.Reflection;
using System.Collections.Generic;
using IronPython.Hosting;

using Microsoft.CSharp;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
// we get access to Action and Func on .Net 4.0 through Microsoft.Scripting.Utils
//using Microsoft.Scripting.Utils;

namespace TestIpyClass
{
class Program
{
public static void Main()
{
// TODO: Implement Functionality Here
ScriptEngine pyEngine = Python.CreateEngine();

// load IronPython class
Assembly myclass = Assembly.LoadFile(Path.GetFullPath("IpyClass.dll"));
pyEngine.Runtime.LoadAssembly(myclass);
ScriptScope pyScope = pyEngine.Runtime.ImportModule("MyClass");

dynamic IpyClass = pyScope.GetVariable("IpyClass");
dynamic ipyClass = IpyClass();
Console.WriteLine(ipyClass.method());
IDictionary<object, object> dict = ipyClass.__dict__;
foreach (var x in dict)
{
Console.WriteLine(x);
}

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。