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

C# 我们可以基于同一类的另一个属性的另一个值来计算一个类属性的值吗?,c#,properties,C#,Properties,我有一个名为Person的类,它有属性名称、出生日期和年龄。Name和DateOfBirth在创建类实例时提供,但我希望在创建类实例时自动计算Age属性。我知道如何使用参数化构造函数,但由于我试图理解属性的威力,我尝试了以下程序,但它没有给出预期的输出 using System; namespace Property { class Person { #region private varaibles private int _age;

我有一个名为Person的类,它有属性名称、出生日期和年龄。Name和DateOfBirth在创建类实例时提供,但我希望在创建类实例时自动计算Age属性。我知道如何使用参数化构造函数,但由于我试图理解属性的威力,我尝试了以下程序,但它没有给出预期的输出

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岁。请提供帮助。

您似乎需要一个只读年龄,如果是这样,您不需要在年龄属性中设置任何内容,只需执行以下操作:

    public int Age
    {
        get { 
               return DateTime.Now.Year - DateOfBirth.Year;
            }
    }
您可能还想看一看并阅读更多有关属性的内容。
顺便说一句,正如@John指出的,在考虑闰年的情况下,正确计算AGMEANING,您可能需要查看一下

您试图在不设置属性的情况下读取属性。所以你可以在代码中完成这两件事,比如

get { return ((DateTime.Now - DateOfBirth).Days / 365); }

我应该为你做这件事you@Breeze我能从你的密码中推断出你的生日是一月一日吗?@约翰:我知道你的意思。这里的目的是展示仅与属性相关的概念。我想让它尽可能简单。我知道:我只是在装腔作势。我加了一张便条,也让你正确的担忧得到解决;是的,正如大家所注意到的,您需要一个只读的Age属性。但是代码中还有一个问题,年龄属性设置器没有从赋值的右侧设置属性;我很惊讶它符合要求。我怀疑如果你给年龄分配了5,比如:P.Age=5;在WriteLine之前,Age属性将从DateOfBirth开始分配,您可能会看到28并且非常困惑。属性设置者总是使用value关键字。请记住,并不是每年都是365天,所以如果你想要一个准确的年龄,你应该考虑闰年。你可以找到解决办法。