[英]C# Getter/Setter not working
我更喜歡Java-Guy,所以用C#處理getter / setter對我來說有點新。 為什么這不起作用?
public String lastmodified {
get { return this.lastmodified; }
set
{
long ms = Int64.Parse(value);
var date = new DateTime(1970, 1, 1).AddSeconds(ms);
date.ToLocalTime();
this.lastmodified = date.ToString("HH_mm_yyyy");
}
}
該課程中的值是類似於1987123019的字符串
因為您是在最后一行分配屬性本身。 您應該使用不同的大小寫或下划線來區分屬性或字段。
我會推薦標准的C#命名約定。 還以原始格式保存數據。 還有德里斯所說的話。
private DateTime lastModified;
public String LastModified {
get { return lastModified.ToString("HH_mm_yyyy"); }
set
{
long ms = Int64.Parse(value);
var date = new DateTime(1970, 1, 1).AddSeconds(ms);
date = date.ToLocalTime();
lastModified = date;
}
}
這將為您提供一個StackOverflowException,因為您是在set
的最后一行中遞歸調用屬性setter(對於該問題,它是get
)。 您需要將值分配給一個類的字段,並從getter中的該字段讀取它。 您當前的代碼只是無限地調用相同的屬性訪問器方法,直到耗盡堆棧空間。
常見的C#命名約定建議為屬性和方法名使用PascalCasing,為實例變量建議使用camelCasing,並可能帶有下划線。
此代碼應工作:
private string lastModified; // instance variable
public string LastModified
{
get { return this.lastModified; }
set
{
long ms = Int64.Parse(value);
var date = new DateTime(1970, 1, 1).AddSeconds(ms);
date = date.ToLocalTime();
this.lastModified = date.ToString("HH_mm_yyyy");
}
}
同樣,“不工作”的含義很廣泛。 但是我猜想您會看到ToLocalTime
方法沒有應用於日期。 這是因為C#中的DateTime
是不可變的,因此構造后不能更改。 您將需要將date
變量分配給ToLocalTime()
的結果:
date = date.ToLocalTime();
對於屬性過程,getter應該返回持有“包裝”值的類成員變量的值。 對於設置器,應將入站值分配給該類成員變量。 您正在執行的操作使屬性成為自引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.