[英]How to lock/unlock a field at runtime in C#?
我可以在運行時鎖定/解鎖字段或對象以防寫入嗎? 換句話說,例如在運行時將對象臨時更改為只讀...
例如:
int x = 5; // x is 5
LockObject(x);
x = 7; // no change
UnlockObject(x);
x = 10; // x is 10
如果不能,您能給我一些可行的解決方案嗎?
您可以使用訪問器來執行此操作...
public class X
{
private bool locked = false;
private int lockedVar;
public int LockedVar
{
get { return lockedVar; }
set { if (!locked) lockedVar = value; }
}
public void LockObject() { locked = true; }
public void UnlockObject() { locked = false; }
}
將其包裝在屬性中,然后使用布爾標志作為“鎖”。
您也可以使用結構來處理這種類型的邏輯。
public struct LockableInt
{
private int _value;
public bool Locked;
public void Lock(bool locked) {Locked = locked;}
public int Value
{
get
{ return _value; }
set
{ if (!Locked) _value = value; }
}
public override string ToString()
{
return _value.ToString();
}
}
客戶端代碼示例:
public static void RunSnippet()
{
LockableInt li = new LockableInt();
li.Value = 5;
Console.WriteLine(li.ToString());
li.Lock(true);
li.Value = 6;
Console.WriteLine(li.ToString());
li.Lock(false);
li.Value = 7;
Console.WriteLine(li.ToString());
}
輸出:
5 5 7按任意鍵繼續...
謝謝大家的幫助。 這是一個更通用的選擇。
我已經決定使用凍結/解凍會更方便,因為在多線程編程的上下文中存在鎖定/解鎖。
public class FreezeableValue<T>
{
private bool frozen;
private T value;
public FreezeableValue()
{
frozen = false;
}
public FreezeableValue(T value)
{
this.value = value;
frozen = false;
}
public void Freeze(bool frozen)
{
this.frozen = frozen;
}
public T Value
{
get { return value; }
set
{
if (!frozen) this.value = value;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.