Object Equality4:13 with Jeremy McLain
What does it mean for two objects to be equal?
According to the rules of the game, towers can't be placed directly on the path. 0:00 We need a way to know if a map location is on the path. 0:04 Let's add another method to the Path class that will return true, 0:08 if the map location passed in, is on the path. 0:12 So we'll say public bool IsOnPath and 0:15 it will take a MapLocation as a parameter. 0:19 And this method, will loop through all of the locations in the path array. 0:26 So we'll say, foreach(var pathLocation in _path, 0:31 And if the location passed in equals one of the path locations, 0:40 We'll return true immediately. 0:48 Otherwise, if we get through all of the locations on the path and 0:52 we get down here to the end of the four H loop we'll return false. 0:56 Because we didn't find a matching location in the path array. 1:01 To test this, let's create a map location that is on the path. 1:05 For now, we'll just do this in the Game.cs file. 1:09 So here we have our path. 1:13 Under here, let's create a new MapLocation. 1:15 And we'll have it be right at the beginning of the path, so 1:22 right here at 0, 2. 1:26 Just copy that down there. 1:31 Now we can say if(path.IsOnPath and 1:33 pass in that location we just created. 1:37 Then on the console will print, 1:46 location + " is on the path". 1:53 And just so we don't continue down into our program we'll return right here. 2:00 Let's go ahead and compile and run this. 2:06 Hm. 2:18 We didn't see our message. 2:19 We should have seen this message printed to the console. 2:21 And we shouldn't have seen any of this stuff because we would have returned. 2:29 We must have a bug in the IsOnPath method. 2:33 Let's take a second look. 2:36 On the surface it looks correct, doesn't it? 2:37 There's something very subtle happening here. 2:41 This double equals sign checks to see if two variables refer to the same object. 2:43 This is different than two locations on the map being the same. 2:50 Let's go back to Game.cs to see the MapLocation objects that should have 2:54 caused the IsOnPath method to return true. 2:58 Here's the MapLocation that's in the path array, and 3:06 here's the MapLocation that we're checking against. 3:09 They may look the same, but these are actually two very different objects. 3:13 See, here we created a new MapLocation and put it in this array, and 3:18 down here we created a completely different MapLocation. 3:22 They just so happen to refer to the same location on the map. 3:26 It's like they're identical twins. 3:30 They aren't the same person, but they look identical. 3:32 The equality operator by default, 3:36 only checks to see if they are the exact same object. 3:38 Or in the case of twins, the exact same person. 3:42 On the computer, these two objects sit in different locations in memory. 3:45 The equality operator actually just calls the static, system.object.ReferenceEqual 3:50 method to determine if two variables refer to the same location in memory. 3:55 In which case, they are the same object. 4:00 If two variables refer to the same object in memory, 4:03 we can say that they have reference equality. 4:06 That's all that double equals equality operator checks for. 4:09
You need to sign up for Treehouse in order to download course files.Sign up