可能重複:
Can I change a private readonly field in C# using reflection?設置只讀域(這是錯誤?)
,而只是用c#播放,實現了一個奇怪的事情。
這裏是代碼:
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Debug.Write(string.Empty);
typeof(string)
.GetField("Empty", BindingFlags.Static | BindingFlags.Public)
.SetValue(null, "Tolgahan");
Console.WriteLine(string.Empty);
// output : Tolgahan
}
}
爲什麼反射讓我們改變只讀域?
更新:問題是「爲什麼通過反射的設置是允許的」,而不是「如何做」,所以它不是重複的。
你可以做各種與反思的東西,你不能做正常。例如,您可以從其他類獲取/設置專用字段。我幾乎肯定這不是一個錯誤;至於是否可取是另一回事。 – Servy
偷報價,只讀是爲了防止「墨菲,而不是馬基雅維利」 –
@Dennis:另一個問題只是詢問是否有可能,這個人說,它是可能的,但問爲什麼(因此比IMO更有價值另一個)。 –