簡體   English   中英

C#Getter / Setter無法正常工作

[英]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.

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