Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
You have completed C# Objects!
You have completed C# Objects!
Preview
Simple properties can be written even more succinctly as automatically implemented properties.
This video doesn't have any notes.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
In the previous video we learned
how to make classes more flexible
0:00
with properties.
0:03
Properties can also be used to
perform better encapsulation.
0:05
Look at the _location
property we just wrote.
0:09
We can remove either the getter or
the setter portion of the property.
0:11
Think about what would happen
if we removed the getter.
0:15
This means other classes can set the value
of the location, but they can't read it.
0:19
Methods and
other properties within the Invader class
0:25
could still read the location by
using the private field directly.
0:27
What if we remove the setter instead?
0:33
Now other classes can get the _location,
but they can't set it.
0:36
The _location field isn't read only,
so methods and other properties
0:40
within the Invader class can still set
the _location by setting it directly.
0:44
Pretty nifty?
0:50
Well, sorta.
0:51
Once there's a property that gets and
0:54
sets a field it's generally bad
practice to access the field directly.
0:55
You should just ignore the fact
that the field is there and
1:01
try to just use the property
whenever possible.
1:04
Otherwise, having two different ways
to change the value of a field can be
1:08
confusing.
1:11
The property is almost always
the one you want to use.
1:13
We still want to be able to restrict read
and write access to the property though.
1:16
Instead of deleting the getter and
1:20
setter, we can use the private
access modifier instead.
1:22
If we put the private
keyword here on the get,
1:27
Then other classes will only
be able to set the _location.
1:31
Methods and
1:36
other properties in the Invader class
will still be able to get it though.
1:36
It's fairly rare to have a private
getter and a public setter.
1:41
On the other hand, having a private setter
and a public getter is very common.
1:45
Now other classes can get
the _location but they can't set it.
1:50
Methods and properties in the Invader
class can still use the setter though.
1:54
Most properties do exactly
what this code here does.
1:59
They just get and
set the value of the field.
2:05
In these cases,
we can further simplify this code.
2:10
We can replace what we
have here with get set.
2:14
We can also delete the field entirely.
2:20
And we can put this on a single line.
2:24
In C# this is called an auto-property
because it doesn't have
2:31
a backing field and it automatically
implements a getter and a setter.
2:35
This is nice because now instead
of having both a property and
2:40
a field, we just have the property.
2:44
It's still used the same.
2:47
And we can still set the access to
the getter and setter individually.
2:48
We want this one private.
2:53
If at some time in the future we
need the more verbose property,
2:56
then we can always expand this
back to its original version.
3:00
And we won't lose any of the benefits
that a property provides.
3:03
Now we have a _location property that
allows other classes to get the Invader's
3:07
location on the map, and allows the
Invader class to update its own _location.
3:10
It's been a while since we last compiled.
3:15
So, let's do that just to make
sure we haven't introduce any
3:17
errors into the code.
3:20
So, let's open up the console and
type in our compile commands,
3:21
mcs -out:TreehouseDefense.exe *.cs.
3:28
Looks like we do have an error here.
3:33
Let's see here.
3:34
TreehouseDefense.Invader.Location cannot
be used in this context
3:35
because the set accessor is inaccessible.
3:40
I think I know what's going on here.
3:43
We made the setter private.
3:45
So now, back in the Game class,
3:48
we can't set the location any
more from the Game class.
3:51
We don't need this code anyway,
so we'll just clear it out.
3:56
Lets compile again,
just make sure that fixes it.
4:00
There we go.
4:03
No compile errors.
4:04
In the next video we'll finish coding
the Invader class by writing a method for
4:06
moving the invader down the path.
4:10
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up