我正在研究面向对象的编程。我有一个班级Dob
,它从主要读取出生日期。如果从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();
答案 0 :(得分:2)
首先,你有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年,您 实际上无法正确检查。然后,您拥有的可能符合您的要求。
答案 1 :(得分:0)
答案 2 :(得分:0)
只是一个如何解决这个问题的例子:
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));
}
}