我正在学习面向对象编程。我有一个类Dob
,它从main读取出生日期。如果 main 的出生日期是从 10 年前到现在,它说"错误",否则"验证"。这是我的班级
public DateTime _Dob;
private DateTime dob {
get {
return _Dob;
}
set {
_Dob = value;
}
}
public Student(DateTime dob_) {
_Dob = dob;
}
public void checkdob(DateTime dob) {
DateTime local = DateTime.Now;
if (dob.Year >= local.Year - 10)) {
Console.WriteLine("error");
} else {
Console.WriteLine("verify");
}
现在我想从主要传递出生日期,但我不知道该怎么做。这是我的主要内容(它有错误,我不知道如何解决(:
Student dob = new Student(new DateTime(23/02/2010));
dob.checkdob( 02/12/2010);
Console.ReadLine();
首先,你property
的方式是错误的。这个想法是你通过公共属性公开私有字段的价值,而不是相反:
private DateTime _dob;
public DateTime Dob
{
get { return _dob; }
set { _dob = value; }
}
但是,如果您无论如何都不使用公共属性,请不要公开它。
现在,将日期传递给类的构造函数,然后在要检查它时再次传递它似乎很奇怪。使用已有的值。
public void CheckDdob()
{
if (_dob.Year >= DateTime.Now.Year -10))
{
Console.WriteLine("error");
}
else
{
Console.WriteLine("verify");
}
}
然后,若要为构造函数创建新DateTime
,只需使用以下命令:
Student dob = new Student(new DateTime(2010, 02, 23));
最后,您可能需要查看您的逻辑,因为您实际上并没有正确检查日期是否超过 10 年前。再说一次,您拥有的东西可能符合您的要求。
为DateTime
使用正确的构造函数参数。这里列出了很多。
你可以从使用这个开始,
new DateTime(2010,02,23)
只是一个关于如何解决这个问题的例子:
using System;
public class Student
{
public Student(string name, DateTime dateOfBirth)
{
Name = name;
DateOfBirth = dateOfBirth;
}
public string Name { get; private set; }
public DateTime DateOfBirth { get; private set; }
}
public static class Helpers
{
public static bool IsOlderThen(this DateTime date, TimeSpan age)
{
var now = DateTime.UtcNow;
return now - date > age;
}
}
public class Program
{
public static void Main()
{
var adult = TimeSpan.FromDays(365 * 18);
var studentOld = new Student("Alice", DateTime.Parse("1998/04/17"));
var studentYoung = new Student("Bob", DateTime.Parse("2015/04/17"));
Console.WriteLine("isAdult: " + studentOld.DateOfBirth.IsOlderThen(adult));
Console.WriteLine("isAdult: " + studentYoung.DateOfBirth.IsOlderThen(adult));
}
}