在C#3.0中,我正在执行下面的代码来声明一个DateTime属性和一个只读的int age属性。
public class MyClass{
public DateTime dateOfBirth{ get; set; }
public int age { get; }
public MyClass(){}
public int CalculateAge(){}
}
但是,当某人以某种形式输入他的出生日期时,我怎样才能获得这个更新的年龄(只读它)?
答案 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();
}
}
}