设定私人领域的价值
为什么下面的代码不工作:
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
方法 - 您正在访问一个字段而不是一个属性,并使用NonPublic
与Instance
。
显然,添加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?