Accessing Properties C# with Example



Accessing Properties C# with Example

class Program 
{ 
public static void Main(string[] args) 
{ 
Person aPerson = new Person("Ann Xena Sample", new DateTime(1984, 10, 22)); 
//example of accessing properties (Id, Name  &  DOB) 
Console.WriteLine("Id is: \t{0}\nName is:\t'{1}'.\nDOB is: \t{2:yyyy-MM-dd}.\nAge is: 
\t{3}", aPerson.Id, aPerson.Name, aPerson.DOB, aPerson.GetAgeInYears()); 
//example of setting properties 
aPerson.Name = " Hans Trimmer "; 
aPerson.DOB = new DateTime(1961, 11, 11); 
//aPerson.Id = 5; //this won't compile as Id's SET method is private; so only accessible 
within the Person class. 
//aPerson.DOB = DateTime.UtcNow.AddYears(1); //this would throw a runtime error as there's 
validation to ensure the DOB is in past. 
//see how our changes above take effect; note that the Name has been trimmed 
Console.WriteLine("Id is: \t{0}\nName is:\t'{1}'.\nDOB is: \t{2:yyyy-MM-dd}.\nAge is: 
\t{3}", aPerson.Id, aPerson.Name, aPerson.DOB, aPerson.GetAgeInYears()); 
Console.WriteLine("Press any key to continue"); 
Console.Read(); 
} 
} 
public class Person 
{ 
private static int nextId = 0; 
private string name; 
private DateTime dob; //dates are held in UTC; i.e. we disregard timezones 
public Person(string name, DateTime dob) 
{ 
this.Id = ++Person.nextId; 
this.Name = name; 
 

this.DOB = dob; 
} 
public int Id 
{ 
get; 
private set; 
} 
public string Name 
{ 
get { return this.name; } 
set 
{ 
if (string.IsNullOrWhiteSpace(value)) throw new InvalidNameException(value); 
this.name = value.Trim(); 
} 
} 
public DateTime DOB 
{ 
get { return this.dob; } 
set 
{ 
if (value < DateTime.UtcNow.AddYears(-200) || value > DateTime.UtcNow) throw new 
InvalidDobException(value); 
this.dob = value; 
} 
} 
public int GetAgeInYears() 
{ 
DateTime today = DateTime.UtcNow; 
int offset = HasHadBirthdayThisYear() ? 0 : -1; 
return today.Year - this.dob.Year + offset; 
} 
private bool HasHadBirthdayThisYear() 
{ 
bool hasHadBirthdayThisYear = true; 
DateTime today = DateTime.UtcNow; 
if (today.Month > this.dob.Month) 
{ 
hasHadBirthdayThisYear = true; 
} 
else 
{ 
if (today.Month == this.dob.Month) 
{ 
hasHadBirthdayThisYear = today.Day > this.dob.Day; 
} 
else 
{ 
hasHadBirthdayThisYear = false; 
} 
} 
return hasHadBirthdayThisYear; 
} 
} 
public class InvalidNameException : ApplicationException 
{ 
const string InvalidNameExceptionMessage = "'{0}' is an invalid name."; 
public InvalidNameException(string value): 
base(string.Format(InvalidNameExceptionMessage,value)){} 
} 
public class InvalidDobException : ApplicationException 
 

{ 
const string InvalidDobExceptionMessage = "'{0:yyyy-MM-dd}' is an invalid DOB. The date must 
not be in the future, or over 200 years in the past."; 
public InvalidDobException(DateTime value): 
base(string.Format(InvalidDobExceptionMessage,value)){} 
} 

0 Comment's

Comment Form