C# Classes
Reading
A class represents a custom data type that allows us to store both state
(properties) and behavior (methods) together.
Declaring a class with properties
This declares a class with three properties, Name, Age, and HungerLevel.
class Cat{public string Name { get; set; }public int Age { get; set; }public int HungerLevel { get; set; }}
Instantiating an object from a class
var kitty = new Cat();
In this case kitty.Name will be null, kitty.Age will be 0, and
kitty.HungerLevel will be 0. Since we did not provide any values for these
properties when we made a new Cat.
Instantiating an object and providing values for properties
var kitty = new Cat() {Name = "Fluffy",Age = 3,HungerLevel = 5};
In this case kitty.Name will be "Fluffy", kitty.Age will be 3, and
kitty.HungerLevel will be 5.
Providing a default value for a property
If a property should default to a value we can specify it in the class.
class Cat{public string Name { get; set; } = "Unknown Cat";public int Age { get; set; }public int HungerLevel { get; set; } = 3;}
var kitty = new Cat();
In this case kitty.Name will be "Unknown Cat", kitty.Age will be 0, and
kitty.HungerLevel will be 3.
Declaring a class with properties and methods
If all cats have the behavior that every time they play, their hunger increases by 3 we can implement that as a method on the class.
class Cat{public string Name { get; set; } = "Unknown Cat";public int Age { get; set; }public int HungerLevel { get; set; } = 3;public void Play(){HungerLevel += 3;}}
var kitty = new Cat() {Name = "Fluffy",Age = 3,HungerLevel = 5};kitty.Play();kitty.Play();
At this point kitty.HungerLevel would be 11 (5 + 3 + 3).
Declaring a property that can be null
As we saw above the default value for a string is null but for an int it
is 0. We can indicate that we allow null values for the int by appending
it with a ?.
NOTE: This is often useful when declaring classes that will be populated from a database or JSON where a column or field is
nullin the input.
class Cat{public string Name { get; set; } = "Unknown Cat";public int? Age { get; set; }public int HungerLevel { get; set; } = 3;}
var kitty = new Cat()
In this case kitty.Age would be null, not 0.
Constructors
The other way to create new instances of an object is by specifying and
requiring a constructor. A constructor is a method with the same name as the
class which is called when we use new Cat (or the class name). We get a
default constructor for free just by declaring the class. We can change the
implementation of that default constructor, or add more constructors that take
specific names.
class Cat{public Cat() {Name = "Fluffy";Age = 3;HungerLevel = 5;}public Cat(string newName){Name = newName;Age = 3;if (newName == "Hungry Cat"){HungerLevel = 100;}else{HungerLevel = 5;}}public string Name { get; set; }public int? Age { get; set; }public int HungerLevel { get; set; }}
In this case:
var theHungryKitty = new Cat("Hungry Cat");var regularCat = new Cat();
The value of theHungryKitty.HungerLevel will be 100 while
regularCat.HungerLevel will be 5.