簡體   English   中英

C#如何禁用指針的使用(如何克隆不可克隆的變量)

[英]C# How to disable the useage of pointers (How to clone a non-cloneable variable)

問題

您好stackoverflow。 我遇到了一個問題。 盡管C#自動啟用了指針的使用,這非常有幫助,但我還是需要克隆一個不可克隆的變量(int)。

我的密碼

我有一個

public int FirstLine 
{ 
    get { return Convert.ToInt32(File.ReadAllLines(@"example.txt")[0]); } 
    set { File.WriteAllLines(@"example.txt", new string[1]{ value.ToString() }); } 
}

我用來獲取一個變量,該變量在被訪問以讀取時從文件中獲取,並且如果被訪問以進行寫入,則它將值寫入文件中,以具有按需更新並保存的變量。

我知道示例代碼說起來非常“不安全”,我只是把我正在做的事情匯總在一起。 在代碼的其他地方,我訪問了此變量:

int GettingVariable = FirstLine;

並且由於C#自動使用指針,因此GettingVariable將根據文件需求自動更新,這不是我想要的。

我想要的答案

我希望能夠克隆int,禁用指針使用,以及不必使用unsafe void (如果可能)。 由於沒有內置的int.Clone(),我該如何管理?

由於C#自動使用指針,因此GettingVariable將根據文件需求自動更新,這不是我想要的。

這不是真的。 該代碼沒有使用任何指針,並且有問題的值復制,並且不會觀察到對該文件或正在訪問它的對象的任何更改。

我希望能夠克隆int,禁用指針使用,以及不必使用unsafe void (如果可能)。 由於沒有內置的int.Clone(),我該如何管理?

使用您已有的代碼。 它已經具有您要的語義。

服務是絕對正確的。

為了給您更多的背景知識,C#並沒有像您描述的那樣“使用指針”- class對象的行為就像雙指針(即**MyClass myVariable ),尤其是在處理refout方法時,而struct對象則表現出語義如上所述。

您應該使自己熟悉C#語義,而不是將所有C#都視為C ++的包裝,尤其是當您到達明確的要點時。 祝好運!

並且由於C#自動使用指針,因此GettingVariable將根據文件需求自動更新,這不是我想要的。

我認為這是您要出錯的地方。 這是因為您使用的是Properties而不是變量,並且我假設每次都訪問該屬性,而與指針無關。 因此,例如此代碼:

public int FirstLine 
{ 
    get { return Convert.ToInt32(File.ReadAllLines(@"example.txt")[0]);
}

每次您嘗試獲取Firstline的值時,它將運行該代碼。 但是,如果您已經有了價值,那么它就不會改變。 例如 :

object.FirstLine = 5;
int firstlineA = object.FirstLine; //Returns 5
object.FirstLine = 10;
int firstLineB = object.FirstLine; //Returns 10
int firstlineC = firstlineA; //Still returns 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM