あなたがint
プロパティを設定し、それを同じように設定します引数としてパブリックではないタイプの場合でも、共分散/反動に応じてobjectを使用して設定できます。
と仮定:デリゲート型自体が内部である場合Action<object>
でプロパティを設定し、あるとして以下のクラスを想定し
はまだあなたがその内部のデリゲート型のインスタンスを作成する必要が
public class MyClass
{
internal Action<Arg> Simple { get; set; }
}
internal class Arg { }
動作します:
public class MyClass
{
internal Internal Simple { get; set; }
}
internal class Arg { }
internal delegate void Internal(Arg arg);
あなたは使用することができます。
var type = typeof(MyClass);
var prop = type.GetProperty("Simple", BindingFlags.NonPublic | BindingFlags.Instance);
var action = new Action<object>((o) => Console.WriteLine("Invoked with {0}", o));
var delegateInsrtance = Delegate.CreateDelegate(prop.PropertyType, action.Target, action.Method);
var obj = new MyClass();
prop.SetValue(obj, delegateInsrtance);
注:上記のコードは動作しますが、我々は(引数は明示的なキャストは必要ありません)Internal
デリゲートと互換性を持つことができるデリゲート(Action<object>
)を作成し、新しいを作成するために、そのデリゲートのMETHODINFOを使用しているため内部代議員。これを作成したいデリゲートのタイプによっては、やりにくくなるかもしれませんが、もっと情報がなければ、これは良い例です。
*イベント*を設定/追加しますか?例えば。 'Button.Click'? –