2017-03-29 8 views
0

署名キー(.snk)を使用しないと、あるアセンブリの内部プロパティに別のアセンブリからアクセスする方法がありますか?InternalVisibleToを使用せずに、あるアセンブリの内部プロパティに別のアセンブリからアクセスする方法

ありがとうございます。

例:

public class MyClass 
{ 
    internal int MyProperty { get; set; } 
} 

そして、強く型付けされた代表者を通じて使用 アルン

+4

反射を使用していますか? – xanatos

+0

はいそれは効率的でなければなりません –

+0

反射は強く型付けされたデリゲートにバックアップできます...その速度は 'virtual'呼び出しと似ているはずです。 – xanatos

答えて

3

反射があまりにも遅くはない...(それはちょうど少し遅くvirtualよりもメソッドの呼び出しでなければなりません)その後:

public static class MyClassAccessor 
{ 
    public static readonly Func<MyClass, int> GetMyProperty; 
    public static readonly Action<MyClass, int> SetMyProperty; 

    static MyClassAccessor() 
    { 
     var prop = typeof(MyClass).GetProperty("MyProperty", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 
     GetMyProperty = (Func<MyClass, int>)Delegate.CreateDelegate(typeof(Func<MyClass, int>), prop.GetMethod); 
     SetMyProperty = (Action<MyClass, int>)Delegate.CreateDelegate(typeof(Action<MyClass, int>), prop.SetMethod); 
    } 
} 

そして、あなたは次のように使用します。

var mc = new MyClass(); 
MyClassAccessor.SetMyProperty(mc, 5); 
Console.WriteLine(MyClassAccessor.GetMyProperty(mc)); 
+0

あなたの明確な説明に感謝します –

関連する問題