我们可以基于同一个类的另一个属性的另一个值来计算一个类属性的值吗?

时间:2018-09-23 01:27:59

标签: c# properties

我有一个名为Person的类,它具有属性NameDateOfBirthAge。创建类实例时将提供NameDateOfBirth,但我希望创建类实例后立即自动计算Age属性。我知道如何使用 参数化构造函数 来执行此操作,但是当我试图了解Properties的功能时,我尝试了以下程序,但未给出预期的输出。

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);    
        }
    }
}

我得到的输出是

enter image description here

我希望年龄在28岁。请帮忙。

2 个答案:

答案 0 :(得分:5)

似乎您需要一个只读年龄,如果是这种情况,则无需在Age属性中设置任何内容,只需执行以下操作即可:

    public int Age
    {
        get { 
               return DateTime.Now.Year - DateOfBirth.Year;
            }
    }

您可能还想看看here并阅读一些有关属性的信息。
顺便说一下,@ John也指出了正确计算年龄的方法(意味着考虑taking年,您可能希望看看here

答案 1 :(得分:3)

您正在尝试读取属性而不进行设置。因此,您可以使用

这样的代码来完成这两项操作
get { return ((DateTime.Now - DateOfBirth).Days / 365); }