using System; using System.Collections; using System.Reflection; using System.IO; namespace reflectioncheckcall { class Program { static void Main(string[] args) { String here = Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location ) + @"\reflectioncheck.dll"; // 同じフォルダにDLLがあることを前提とする Assembly reflectionCheckDLL = Assembly.LoadFrom(here); Type TtargetClass = reflectionCheckDLL.GetType("reflectionCheck.targetClass",true); Type TpositionClass = reflectionCheckDLL.GetType("reflectionCheck.positionClass", true); Type TsampleEnum = reflectionCheckDLL.GetType("reflectionCheck.sampleEnum", true); // reflectionCheck.targetClass を生成(コンストラクタなし) Object oTargetClass = Activator.CreateInstance(TtargetClass, true); // reflectionCheck.positionClass を生成(コンストラクタあり) Object oPositionClass5 = TpositionClass.InvokeMember(null, BindingFlags.CreateInstance, null, null, new Object[] { TsampleEnum.InvokeMember("wah", BindingFlags.GetField, null, null, null) }); // 生成したtargetClassのpropStrプロパティに設定 TtargetClass.InvokeMember("propStr", BindingFlags.SetProperty, null, oTargetClass, new Object[] { "ABCD" }); // reflectionCheck.sampleEnumの生成と値設定 Object oSampleEnum = TsampleEnum.InvokeMember("low", BindingFlags.GetField, null, null, null); // reflectionCheck.sampleEnum[]の生成と値設定 ArrayList oSampleEnums = new ArrayList(); oSampleEnums.Add(TsampleEnum.InvokeMember("kau", BindingFlags.GetField, null, null, null)); oSampleEnums.Add(TsampleEnum.InvokeMember("low", BindingFlags.GetField, null, null, null)); oSampleEnums.Add(TsampleEnum.InvokeMember("tas", BindingFlags.GetField, null, null, null)); // targetClassのpropStrプロパティ読み出し String s1 = (String)TtargetClass.InvokeMember("propStr", BindingFlags.GetProperty, null, oTargetClass, null); // targetClassのmethod1メソッド呼び出し String s2 = (String)TtargetClass.InvokeMember("method1", BindingFlags.InvokeMethod, null, oTargetClass, new Object[] { oSampleEnum }); // targetClassのmethod2メソッド呼び出し String s3 = (String)TtargetClass.InvokeMember("method2", BindingFlags.InvokeMethod, null, oTargetClass, new Object[] { oSampleEnums.ToArray(TsampleEnum) }); // targetClassのmethod3メソッド呼び出し Object oPositionClass4 = TtargetClass.InvokeMember("method3", BindingFlags.InvokeMethod, null, oTargetClass, new Object[] { oSampleEnum }); String s4 = oPositionClass4.ToString(); // positionClassのiposフィールド読み出し String s5 = ((int)TpositionClass.InvokeMember("ipos", BindingFlags.GetField, null, oPositionClass5, null)).ToString(); Console.WriteLine("propStr : {0}", s1); Console.WriteLine("method1 : {0}", s2); Console.WriteLine("method2 : {0}", s3); Console.WriteLine("method3 : {0}", s4); Console.WriteLine("ipos : {0}", s5); return; } } }