‫欢迎回来｡
‫在本视频中, 我们将继续介绍属性､ setter和getter｡
‫我们从上一个视频开始, 在那里我们看了setter和getter, 现在我们将使用相同的代码,
‫我们将对其进行一点扩展｡
‫所以我们可以使用setter来设置成员变量的值, 我们可以实现自己的逻辑来设置它｡
‫所以我们可以说, 如果你想设置值, 它必须遵循我的规则, 这样我们就可以定义我们自己的规则,
‫这必须是｡
‫紧随其后｡
‫还有吸气剂, 我们也可以调整｡
‫所以我们可以说, 如果你想得到这个变量,
‫我会给予你, 长度, 高度和宽度相乘的结果, 你可以根据自己的喜好修改它们｡
‫现在让我们来看看属性以及它们之间是如何相互联系的｡
‫我们来创建一个属性, 我将创建一个名为height的公共属性, 这个height将调整我的height成员变量.
‫所以之前是公开的｡
‫现在我要把它变成私人的, 这样我们就不能从外面进入高处｡
‫所以在这里, 如果我想调整高度, 我将不能再这样做了｡
‫现在我得到这个错误｡
‫好吗？
‫现在让我们使用height属性, 以便仍然能够访问上面的高度｡
‫那我们该怎么做呢？
‫首先, 我们用这个属性开头是大写的H.
‫这通常是使用属性的方式｡
‫那是一个约定和C编程｡
‫属性以大写字母开头, 现在我可以创建getter, 返回高度,
‫创建setter｡
‫我可以把高度设为, 比如说, 指定的值.
‫现在, 这个值关键字是什么？
‫我们现在所做的和之前做的基本上是一样的, 我们设定长度, 然后得到长度｡
‫但现在我们的门户, 可以说, 是我们的财产高度｡
‫所以如果你想访问或更改高度值得纪念, 你必须通过属性高度来做｡
‫所以现在你可以把它设置为你设置的高度值｡
‫当我们进入程序, 设置高度时, 它看起来是什么样子的？
‫通过直接访问成员变量, 我们不能再这样做了｡
‫但是如果您访问该属性, 如您所见, 高度在此处可用, 我们可以在此处看到此工具图标｡
‫这通常是当你想访问一个属性时的图标, 你可以看到它的工作原理｡
‫我们现在就可以设定高度, 如果我们这样做了, 这个或这个,
‫无论在这个等号后面, 还是在这个等号后面, 都将是这里的值, 这个值和它将被设定为高度｡
‫所以这个值和之前我们创建集合长度时的长度差不多｡
‫基本上是同一个概念, 但我们只是用了一种更短的方法, 对吧？
‫这里你可以看到, 如果我们想有一个setter, 我们有所有这些代码｡
‫当然, 我们并不需要这个代码｡
‫好吗？
‫但是, 我们仍然有所有这些代码, 现在我们有这个超级短的代码｡
‫这就是二传手｡
‫当然在这里我们也可以调整一下｡
‫如果值小于零, 我们就把高度设为负值, 否则就设为高度, 相等｡
‫现在让我们进入程序, 我把高度设为-4｡
‫最后, 我说了之前的话, 因为我们之前制造了这个错误｡
‫好吧, 我知道了
‫现在我们将高度设置为-4, 运行代码｡
‫我们会看到它的效果｡
‫所以长度等于高度等于宽度等于5｡
‫为什么呢？
‫即使我们将值设置为负4？
‫我们说过如果传递给我的高度值是负数, 那么我要乘以它｡
‫所以如果这个值小于0, 我会把它乘以-1｡
‫所以我要再把它变成阳性｡
‫如果它是正的, 那么就做它或者赋值｡
‫如果是零, 也没关系｡
‫好吧, 我会的
‫这就是我们可以用属性来做的｡
‫现在, 这是一个属性的实现｡
‫当然, 您也可以只使用属性, 而不使用成员变数｡
‫所以我们这里的成员变量可以是不需要的｡
‫所以我们可以跳过这个｡
‫假设我不想把宽度设为成员变量, 我想把它设为一个属性.
‫现在我将向您展示另一种创建属性的方法｡
‫而且这要快得多｡
‫所以你只要使用P, R, o, p, 然后你双击, 这将为你创建这个属性｡
‫现在你只要输入类型, 我会说, 好的, 它会是一个整数｡
‫然后你再按一次tab键, 现在你可以给予它一个名字了｡
‫所以我把这个叫做宽度｡
‫这是怎么回事？
‫这是一个C sharp能理解的代码, 它甚至是用我们的ID自动为我们创建的｡
‫好吧, 我知道了
‫它只是说获取分号设置分号｡
‫这意味着它只是一个默认的getter和setter,
‫这意味着, 如果你想访问width, 你可以通过这个属性的width变量来访问它.
‫如果你想设置它, 你也可以直接使用它｡
‫那么, 在我们的案例中, 这意味着什么呢？
‫这意味着我们现在可以通过赋值来访问这个属性｡
‫如果我们想把它写出来｡
‫所以如果我们想访问它, 用点来表示｡
‫有了｡
‫所以在这里我们可以直接访问属性｡
‫好吧, 我会的
‫这就是区别所在｡
‫所以在内部, 这和我们创造的是一样的｡
‫了｡
‫有了｡
‫让我们回到这个问题上, 让我们再看看这个成员变量｡
‫在内部, 这和我用创建这个public
‫end是一样的, 我现在要把它注释掉, 我有一个getter, 所以我返回宽度｡
‫还是这样打点着｡
‫而二传手, 我说他们从价值开始｡
‫好吧, 我会的
‫所以这是真的｡
‫这件事
‫这里的代码实际上和这里的代码是一样的｡
‫在内部, 它也是在编译代码后发生的事情｡
‫因此编译器会自动执行此操作｡
‫对于我们来说, 它只是说, 好的,
‫如果你有这行代码, 我会在内部处理它, 就像你这里的代码一样, 只是它要短得多, 创建代码也要容易得多｡
‫好吧, 我会的
‫我将把它注释掉, 因为我很喜欢这个简短的方法,
‫我们这样注释掉｡
‫我不再需要这个成员变量了｡
‫好吧, 我会的
‫因为这里我们需要记住变量因为我设置了宽度, 在这里, 我设置了成员变量宽度.
‫我没有设置｡
‫我无法设置宽度本身｡
‫所以如果我在这里反而会写着｡
‫如果我现在这样做, 我会创建一个StackOverflow｡
‫所以我不断地尝试设置一些东西, 这将是一个无尽的循环, 这是不好的｡
‫这就是为什么我需要记住这个例子中变量｡
‫好吧, 我会的
‫但在内部, 它会这样那样对待它｡
‫所以它在内部把它当作我们这里的代码｡
‫只不过对我们来说要短得多｡
‫好吧, 我会的
‫现在给你们一个小小的挑战｡
‫请继续, 并创建一个围绕它的体积属性, 就像我们在这里对宽度所做的那样｡
‫好吧, 我会的
‫这个例子和这里的差不多, 只是它会调整音量, 而不是宽度｡
‫所以请你试试｡
‫创建您自己的属性, 将其键入｡
‫不要采取简短的方法或使用简短的方法｡
‫好吧, 我会的
‫因此, 为了使这有意义, 我们首先必须使我们的卷私有化, 然后我们可以为我们的卷创建一个属性｡
‫所以带大写字母V的公共整数量将被得到｡
‫返回音量, 然后设置｡
‫此起始体积等于｡
‫物有所值｡
‫这是我们为卷创建的属性｡
‫我希望你能这样做｡
‫当然, 你可以完全去掉这个体积, 然后用我们对宽度的处理方法来创建它｡
‫这样快多了, 但我只是想让你知道这一切都很酷｡
‫现在, 该｡
‫重要的是, 我们可以考虑体积变量或这个性质, 为什么,
‫或者在什么时候改变它或得到它是有意义的？
‫两个都做有意义吗？
‫因为体积是根据宽度､ 高度和长度计算出来的｡
‫现在, 直接设置音量有意义吗？
‫嗯, 不, 我会这么说｡
‫我认为设置音量根本没有意义, 所以我们可以去掉整个设置器, 只使用一个getter｡
‫现在, 音量本身, 我们从来没有设置音量｡
‫它总是经过计算的｡
‫那么, 只返回卷有意义吗？
‫事实上并不是这样, 因为实际上我们要做的是,
‫在这一点上, 我们应该计算出体积是长, 高, 宽的乘积｡
‫所以现在它更有意义了｡
‫所以我们用体积返回的东西更有意义｡
‫如果有人想得到音量, 那就是他们得到的｡
‫当然, 我们在底部创建了一个小bug, 或者一些我们不再需要的获取卷的方法｡
‫与此同时, 宽度是我们访问的属性｡
‫不会是那个｡
‫记住变量, 因为我们已经没有变量了｡
‫当然, 在我们的CSS程序中, 我们现在也可以调整所有内容｡
‫现在我们可以直接访问宽度, 也可以直接访问体积属性, 而不再是体积成员变量｡
‫好吧, 我会的
‫现在我们来做最后一步｡
‫那就是添加一个构造函数｡
‫如此公开｡
‫盒子里｡
‫INT长度｡
‫内景
‫高度和终点｡
‫宽度｡
‫现在如果我们创建一个长方体, 我需要所有这些值, 并且一旦创建了长方体,
‫给我的长度应该是这个点的长度｡
‫然后给出高度, 这个点的高度应该是高度｡
‫所以这个变量的高度应该是这里的高度, 也就是我们的成员变量｡
‫我们的宽度是最后一个, 这是属性｡
‫因此, 我们将其设置为给定的宽度｡
‫现在, 在这种情况下, 你当然可以省略这个, 这个关键字｡
‫你可以直接说宽度, 因为很明显我们讨论的是这个类的属性｡
‫所以这里不需要这个关键词｡
‫现在, 有人问我一件重要的事情, 我想把它说清楚｡
‫所以这个点的长度, 长度相等是行得通的, 但是长度等于这个点的长度没有意义｡
‫所以这一行没有意义, 因为长度是这一部分, 它实际上只是一个参数, 它是给我们的值｡
‫所以我们不想调整给定的值, 但是我们想设置属性或成员变量的值, 这就是我们在这里要做的｡
‫所以在这种情况下, 这就是我们要做的｡
‫我们设置成员变量的值｡
‫好吧, 现在我们用这个盒子｡
‫现在我们来创建盒子, 因为现在我们不需要再做所有这些了｡
‫我们不再需要直接设置这些值, 但可以在创建盒子时设置｡
‫所以我只需要赋值3, 4, 5｡
‫所以长度是3｡
‫这个高度或者实际上这个高度是四变成宽度是五｡
‫现在如果我们运行这个程序, 它会为我们显示宽度和体积｡
‫所以你就这样了｡
‫五卷是六十卷｡
‫好吧, 我会的
‫这似乎行得通｡
‫现在, 我们可以通过访问属性来设置宽度｡
‫假设我们现在将宽度设置为10, 然后再次运行此代码｡
‫然后再一次用拆分, 我们可以看到, 给定的默认值被打印出来, 然后是我们设置的新值｡
‫所以我们把宽度设为10, 现在它会显示宽度, 并相应地计算宽度｡
‫所以3乘以4乘以10等于1/20｡
‫这是新卷｡
‫好吧, 我会的
‫召唤它｡
‫所以我们首先创建了一组成员变量｡
‫我们将它们设为私有的, 这样除了这个类本身之外, 没有人可以直接访问它们｡
‫因此其他类无法直接访问它们｡
‫他们只能通过我们创建的属性或通过我们的setter和getter访问它们｡
‫所以我们有集合长度, 得到长度｡
‫所以如果有人想访问长度变量, 他们必须使用set length和get length｡
‫这是一个完全有效的方法, 你会看到的｡
‫是的, 通过这些方法, 你可以定义你想要遵循的逻辑｡
‫比如说, 如果有人想设置一个变量或者想得到一个变量.
‫现在, 另一种方法是直接使用属性｡
‫所以如果你使用一个属性, 你需要用大写字母来调用它, 然后你可以实现一个getter等等｡
‫但是您也可以决定只实现getter或者只实现setter｡
‫当然, 我们在这里并没有同时实现这两种方法｡
‫您也可以设定｡
‫值, 因此您可以设置成员变量｡
‫这就是我们所做的｡
‫也就是说, 添加一个名为Height的网关, 它是我们在顶部创建的height的属性, 它是我们的成员变量.
‫或者我们直接说,
‫我们直接有一个非常简单的自动实现的属性, 我们不需要为它提供一个额外的成员变量｡
‫我们完全可以让所有变量都有属性.
‫所以我们可以把它做得很简单｡
‫但只要有三个属性就像｡
‫这件事
‫所以去掉所有这些, 然后用一个公共的或者apr0p的双击, 然后长度就可以设置了, 然后高度也是一样的,
‫等等｡
‫但我只是想向你们展示所有不同的方式, 还有所有不同的方式, 你们会看到｡
‫大多数时候当你看到一些东西或者使用属性的时候, 你会看到它们大多数时候是这样的｡
‫那么, 对于其他已实现的属性, 最简单和最快的方法是什么？
‫你不需要使用我展示给你的所有不同的方法, 这是非常重要的｡
‫您不需要使用所有不同的结构, 但在某些情况下, 您需要实现setter｡
‫在某些情况下, 您需要实现特定的getter, 现在您知道了如何实现它｡
‫简而言之, 如果您有任何问题, 为什么需要这种方法？
‫好吧, 它们只是在您不需要在属性评估器中使用额外的逻辑时使用｡
‫所以在属性定义和耶｡
‫获取器和设置器｡