私は本 Pro C# 5.0 の例に従おうとしていますが、うまくいかないものに出くわしました:
static void Main() {
Assembly asm = Assembly.Load("CarLibrary");
Type MiniVan = asm.GetType("CarLibrary.MiniVan");
dynamic d = Activator.CreateInstance(Minivan);
Console.WriteLine("Type of d is {0}", d.GetType()); // Type is CarLibrary.MiniVan
MethodInfo m = MiniVan.GetMethod("TurboBoost");
m.Invoke(d, null); // This works fine, and prints out "Turbo Boosting"
d.TurboBoost(); // This doesn't work like the book says it should.
// I get: object does not contain a definition for TurboBoost;
CarLibrary の宣言は次のとおりです。
namespace CarLibrary {
// UPDATE: I just realized that I had declared MiniVan internal
internal MiniVan {
public void TurboBoost() {
Console.WriteLine("Turbo Boosting");
}
}
}
したがって、MiniVan が INTERNAL として宣言されていても、Reflection を使用して MiniVan のインスタンスを作成し、TurboBoost() を呼び出すことができます。しかし、dynamic キーワードを使用すると、TurboBoost() の呼び出しが機能しません。ただし、MiniVan が PUBLIC と宣言されている場合は、どちらの場合も完全に機能します。
それがすべて想定どおりかどうか誰か教えてもらえますか?