设定私人领域的价值

为什么下面的代码不工作:

class Program
{
    static void Main ( string[ ] args )
    {
        SomeClass s = new SomeClass( );

        s.GetType( ).GetField( "id" , System.Reflection.BindingFlags.NonPublic ) // sorry reasently updated to GetField from GetProperty...
            .SetValue( s , "new value" );
    }
}


class SomeClass
{
    object id;

    public object Id 
    {
        get
        {
            return id;
        }
    }   
}

我试图设定私人领域的价值。


这是我得到的豁免:

System.NullReferenceException未处理消息=对象引用未设置为对象的实例。 来源= ConsoleApplication7
堆栈跟踪:在Program.Main(字串[] args)在C:用户安东尼奥桌面 ConsoleApplication7 ConsoleApplication7 Program.cs的:线18在System.AppDomain._nExecuteAssembly(RuntimeAssembly组件,字串[] args)在系统。 AppDomain.ExecuteAssembly(字符串assemblyFile,证据assemblySecurity,字串[] args)在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()在System.Threading.ThreadHelper.ThreadStart_Context(对象状态)在System.Threading.ExecutionContext.Run(ExecutionContext中的ExecutionContext ,ContextCallback回调,在System.Threading.ExecutionContext.Run(的ExecutionContext的ExecutionContext,ContextCallback回调,对象状态)在System.Threading.ThreadHelper.ThreadStart()的InnerException对象状态,布尔ignoreSyncCtx):


尝试一下(灵感来源于用反射查找私人领域?):

var prop = s.GetType().GetField("id", System.Reflection.BindingFlags.NonPublic
    | System.Reflection.BindingFlags.Instance);
prop.SetValue(s, "new value");

我的更改是使用GetField方法 - 您正在访问一个字段而不是一个属性,并使用NonPublicInstance


显然,添加BindingFlags.Instance似乎已经解决了它:

> class SomeClass
  {
      object id;

      public object Id
      {
          get
          {
              return id;
          }
      }
  }
> var t = typeof(SomeClass)
      ;
> t
[Submission#1+SomeClass]
> t.GetField("id")
null
> t.GetField("id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
> t.GetField("id", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
[System.Object id]
> 
链接地址: http://www.djcxy.com/p/95935.html

上一篇: Set value of private field

下一篇: How to use WCF services in .netstandard with Xamarin.Forms project?