繁体   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