Using Properties4:20 with Jeremy McLain
Properties can be used the same way fields are, but they're really more like methods.
With the setter of the location property being private, 0:00 the only way it can be set is from within the invader class. 0:03 Right now, we don't have anything that sets the location property. 0:07 The default value of an uninitialized map location is null. 0:11 We don't want users of the invader class getting null when they ask for 0:15 the invader's location. 0:18 We need to initialize it to some starting value when the object's created. 0:19 That's the purpose of the constructor. 0:23 So let's add a constructor. 0:25 So we'll type public Invader. 0:28 The constructor will set the location property to the first 0:31 location on the path. 0:33 So the constructor needs to have the path passed in. 0:35 We'll get the GetLocation method of the path object to get the first location on 0:38 the path and assign it to location. 0:42 So now, all invaders will start on the first step of the path. 0:49 [SOUND] In the tree house defense game, 0:53 invaders move down the path while towers attempt to neutralize them. 0:55 If the invader successfully reaches the end of the path, then the game is over and 1:00 the player will have lost. 1:04 It would be the responsibility of each invader object to keep track of how far 1:06 down the path they are. 1:10 So, we'll need to add another field called _pathStep to keep track of this. 1:11 No other classes will need to know this information. 1:16 So we'll make it private. 1:18 This field will change over time. 1:22 So we don't want to make it read-only. 1:24 We'll also give this field an initial value of 0. 1:27 Because all invaders will start on step 0 of the path. 1:30 In fact we can use this _pathStep field in our call to GetLocationAt, 1:34 instead of using 0 twice. 1:38 The reason we can do this is because the _pathStep field is 1:40 set to 0 before the Invader constructor is called. 1:43 The fields of a class are always 1:46 initialized before the constructor is called. 1:48 Of course, the default value of an integer is always 0, 1:50 so initializing it to 0 here is redundant. 1:54 But it's a good practice to initialize it to 0. 1:58 By doing this we're saying that we've thought about what we want this initial 2:01 value to be, and we want it to be 0. 2:04 Now we'll create a method called move that'll advance the invader down the path. 2:08 This will be called by code outside the invader class, so it needs to be public. 2:13 We'll strictly use this method to tell the invader to move, so 2:18 we don't need anything back from it. 2:21 Let's give it a void return type. 2:23 When the move method is called, 2:27 it will advance the invader one step down the path. 2:29 To do that, we just need to increase the _pathStep by 1. 2:33 Now that we've changed what step the invader is on, 2:37 we need to update its location. 2:40 We can do this using path.GetLocationAt method. 2:42 The only problem is, we don't have a path object here to refer to. 2:46 It looks like we need to store an instance of the path object in the invader object 2:50 so that it can be accessed later. 2:54 To do this, we just need to create another field in the Invader class and 2:57 assign it the path that was passed into the constructor. 3:00 The path object is just for the Invader class to use. 3:03 So we'll make it private readonly. 3:06 Then in the constructor we'll set it to the path that was passed in, 3:12 and I'll change this to use the field instead. 3:17 Now we can go back to the move method and use the object's instance of the path 3:23 to update the location property to the invader's new location. 3:27 So we'll say location = _path.GetLocationAt(_pathStep). 3:31 There we go. 3:43 Finally, a note about terminology. 3:45 We've now created classes that have fields, properties, methods, and 3:47 constructors. 3:52 Each of these things are called members of the class. 3:53 We can refer to the path and pathStep fields, the location property and 3:57 the Move method collectively as members of the Invader class. 4:02 Members that are treated like variables in the class, such as fields and 4:07 properties, are often referred to as member variables. 4:11 In other courses we'll learn about other types of members that a class can have. 4:15
You need to sign up for Treehouse in order to download course files.Sign up