C#3.0如何才能获得只读属性值?

时间:2009-09-03 19:34:49

标签: c#-3.0

在C#3.0中,我正在执行下面的代码来声明一个DateTime属性和一个只读的int age属性。

public class MyClass{
    public DateTime dateOfBirth{ get; set; }
    public int age { get; }

    public MyClass(){}

    public int CalculateAge(){}
}

但是,当某人以某种形式输入他的出生日期时,我怎样才能获得这个更新的年龄(只读它)?

8 个答案:

答案 0 :(得分:8)

您需要实现“age”属性,以便它可以使用dateOfBirth属性:

public int age { 
    get {
         return (DateTime.Now - this.dateOfBirth).Days / 365;
    }
}

答案 1 :(得分:7)

不要存储年龄,而是在执行年龄属性获取时计算它:

public int Age { get { return 100; } }

但不是返回100,而是进行计算。

答案 2 :(得分:2)

您无法使用auto readonly属性。你必须实现该属性。您可能还会考虑使用TimeSpan而不是int,因为它将更加通用。

public TimeSpan Age 
{ 
    get 
    { 
        return DateTime.Now - this.dateOfBirth; 
    } 
}

答案 3 :(得分:2)

不要让Age成为自动属性,而是实施年龄计算器。

public class MyClass {
    public DateTime DateOfBirth { get; set; }
    public int Age { 
        get {
            DateTime now = DateTime.Now;
            int age = now.Year - DateOfBirth.Year;
            if(now < DateOfBirth.AddYears(age)) age--;
            return age;
        }
    }
}

你应该把上面的计算重构成一个方法,但上面说明了一个重点。

答案 4 :(得分:1)

正如Svinto所说,计算年龄并在Age属性的get方法中返回。 See How do I calculate someone's age in C#?关于如何执行此操作的想法。

答案 5 :(得分:1)

如果您想要一个只能分配的属性,但任何人都可以阅读:

public class MyClass
{
    public int Age { get; private set; }
}

然后你的班级可以指定Age,但其他班级只能读取它。

答案 6 :(得分:0)

使用您的代码计算年龄属性的年龄。

例如:

public int Age
{
     get
     {
          return (age code here);
     }
}

答案 7 :(得分:0)

为什么不稍微改变你的实现:

public class MyClass
{
    public DateTime DateOfBirth {get; set;}
    public int Age
    {
        get
        {
            return this.CalculateAge();
        }
    }
}