【发布时间】:2018-09-23 01:27:58
【问题描述】:
我有一个名为Person 的类,它具有Name、DateOfBirth 和Age 的属性。 Name 和 DateOfBirth 在创建类实例时提供,但我希望在创建类实例后立即自动计算 Age 属性。我知道如何使用 Parametrized Constructor 来做到这一点,但是当我试图了解属性的强大功能时,我尝试了以下程序,但它没有给出预期的输出。
using System;
namespace Property
{
class Person
{
#region private varaibles
private int _age;
#endregion
#region properties
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
public int Age
{
get { return _age; }
set { _age = (DateTime.Now - DateOfBirth).Days / 365; }
}
#endregion properties
}
class Program
{
static void Main(string[] args)
{
Person P = new Person() { Name = "Merin Nakarmi", DateOfBirth = new DateTime(1990, 1, 12) };
Console.WriteLine("{0}, whose Date Of Birth is {1} is {2} years old!", P.Name, P.DateOfBirth, P.Age);
}
}
}
我得到的输出是
我预计年龄是 28 岁。请帮助。
【问题讨论】:
-
是的,您需要一个只读的
Age属性,因为大家都注意到了。但是您的代码中还有另一个问题,您的Age属性设置器没有从分配的右侧设置属性;我很惊讶它符合要求。我不知何故怀疑,如果您在 WriteLine 之前将 5 分配给Age说:P.Age=5;,那么 Age 属性将从DateOfBirth分配,您可能已经看到 28 并且非常困惑。属性设置器始终使用value关键字。 -
附带说明,请记住,并非每年都是 365 天,因此如果您想要准确的年龄,您应该考虑闰年。你可以找到解决方案here。
标签: c# properties