我最近接受了C#问题的采访。其中一个我找不到答案。
我上了一堂课,看起来像这样:
public class Stick
{
private int m_iLength;
public int Length
{
get
{
return m_iLength;
}
set
{
if (value > 0)
{
m_iLength = value;
}
}
}
}
此外,还有一个主要课程
static void Main(string[] args)
{
Stick stick = new Stick();
}
任务是向main添加代码,这将导致Stick类中的m_iLength
为负(并且强调它可以完成)。
答案 0 :(得分:4)
反思始终是最直接的:
var type = typeof(Stick);
var field = type.GetField("m_iLength", BindingFlags.NonPublic |BindingFlags.GetField | BindingFlags.Instance);
field.SetValue(stick, -1);
Console.WriteLine(stick.Length);
说明:
第一行获取Type
的{{1}}对象,因此稍后我们可以获取私有字段。
第二行获取我们想要通过其名称设置的字段。请注意,绑定标记是必需的,或Stick
将是field
。
第三行给该字段一个负值。