‫好吧, 我会的
‫现在, 大家已经了解了代表的一般概念, 让我们来看看他们的实际行动｡
‫为了更好地理解它们, 我们将从一个已经存在于升C中的代理开始｡
‫首先, 让我们定义一个简单的名为names的字符串列表｡
‫然后我会用这个｡
‫假设我想从中删除名称｡
‫这里有一个remove all方法, 这个remove
‫all方法允许我删除所有符合指定谓词定义的条件的元素｡
‫这里你可以看到这个绿色的谓词关键字｡
‫这里基本上是我们可以通过的｡
‫这里基本上就是, I, 预期的委托谓词, 就是预期的委托的名字.
‫一旦你点击它, 你会在这里找到它｡
‫公共委托池谓词｡
‫所以这里我们可以看到谓词是一个委托, 它接受RT的对象, 这意味着特定的类型｡
‫在本例中, RT是我们的列表元素的类型｡
‫所以在我们的例子中, 它是一个字符串, 它返回一个布尔值｡
‫因此, 当我们调用remove all方法时, 这个谓词将被调用到列表中的每个名字上｡
‫如果我们阅读文档, 我们将了解到该谓词返回的bool将决定是否从列表中删除该元素｡
‫如果返回true, 则将删除该元素｡
‫而我们的工作是写这些规则来决定我们名单上名字的命运｡
‫我们这里的这些名字, 也就是说艾登的文件夹和安纳托利.
‫毕竟, 编写remove all方法背后代码的人不能读懂我们的思想来确定我们想要的规则｡
‫-没错—没错
‫这就是为什么我们将创建自己的方法, 该方法与谓词委托的定义相匹配, 并将其传递给remove
‫all方法｡
‫假设我们想删除所有包含字母I的名字, 这样我们就可以像这样编写过滤方法｡
‫因此, 我们只需创建一个静态池过滤器, 它将接受字符串｡
‫这是我们的方法filter, 我们返回字符串中是否包含字母I.
‫这里我们使用了contains方法, 它会返回一个布尔值, 它会返回true或false｡
‫所以这里包含了C, 它接受一个字符串, 检查它是否包含C, 然后返回一个布尔值.
‫所以我们在这里要做的就是返回一个布尔值｡
‫它以字符串作为参数｡
‫所以基本上我们还会再来的｡
‫如果字符串包含I, 则为True, 然后remove all方法将对列表中的所有元素执行此过滤器方法｡
‫现在让我们把filter方法传递给remove all方法, 这个方法还没有完成, 还需要一个委托,
‫我们可以传递给它.
‫而让我们为每个循环添加一个在remove all前后的方法只是为了观察｡
‫所以我要在这里添加一小段代码, 我只是说这是之前发生的事情｡
‫所以我们在控制台上写一个名字列表, 其中包含列表中的所有名字｡
‫然后我们去掉所有这些, 按照一定的过滤器, 我们再运行一次｡
‫现在我们传递的这个过滤器, 你看, 我们这里没有使用括号, 尽管它是一个方法｡
‫所以基本上我们在这里传递一个方法作为参数我们在检查我们传递的字符串是否包含AI.
‫让我们运行一下, 看看哪些名字包含I｡
‫所以我们有探员如果沃尔特和安纳托利｡
‫之后, 我们去掉了所有的, 除了Walter, 因为Walter是一个不包含眼睛的字符串｡
‫这基本上就是我们如何使用一个预先存在的委托｡
‫现在我们已经使用了一个方法, 它需要一个可以传递给它的委托｡
‫所以基本上是这样的, 命名这个字符串列表.
‫被给予删除所有和检查一个接一个的过滤器, 我们已经在这里使用｡
‫因此, 它将名称中的每一个值一个接一个地传递到我们的filter方法中, 遍历该filter并返回是否应该删除它｡
‫因此, 如果I包含在传递的字符串中, 则此布尔值将为true｡
‫我们现在看到的字符串在名字列表中, 如果这里返回true,
‫那么filter方法也会返回true, 这会导致remove all从名字列表中删除名字.
‫好的, 这只是委托的一个例子｡
‫你看, 我们并没有明确地传递我们想要的东西｡
‫所以我们没有说我们要取哪个字符串, 比如说, 先说name, 然后是index, 或者其他什么｡
‫我们不需要做任何这些, 因为我们在这里移除所有期望的委托, 这就是我们传递给它的｡
‫如果这还有点令人困惑, 没关系｡
‫我们会有更多的例子,
‫这肯定会帮助你们更好地理解代表, 因为我们会自己创建一些, 这样会更有意义｡
‫下一段视频再见｡