‫欢迎回来｡
‫在本视频中, 我们将讨论结构体｡
‫结构体与类非常相似, 但类是引用类型, 而结构体是值类型, 这意味着如果你创建一个类的对象,
‫它可以不包含任何内容｡
‫所以它可以是空的, 但是结构体必须有一个值｡
‫让我们创建一个名为game的结构体, 使用struct关键字, 然后给予它一个名字.
‫所以从你所看到的来看, 它和类非常相似｡
‫这里有这个名字, 然后你可以在这里创建变量.
‫因此, 我将创建一个名为name的文件夹,
‫然后创建一个名为developer的文件夹和一个名为rating的文件夹｡
‫那么这个游戏是如何评级的, 然后公开字符串发布日期？
‫什么时候发行的？
‫这是一个简单的结构体｡
‫现在我们可以创建一个结构体的对象, 这样我们就可以说, 好的, 游戏,
‫游戏一就像这样.
‫现在我们有了这个博弈｡
‫但是为了使用这个博弈, 我们需要指定它.
‫所以我们需要游戏的规格｡
‫举个例子, 我们需要设定名字, 比如说是《精灵宝可梦Go》, 那么游戏一需要有一个开发者｡
‫所以我们会说一些像Niantic的东西然后第一场比赛需要有一个评级｡
‫假设是3｡ 5星中的5星和最后的发行日期｡
‫因此, 您可以简单地设置这些值｡
‫所以这和你用类做的很相似, 对吧？
‫它是在2016年发布的, 这就是我们的游戏结构｡
‫现在, 我们可以继续将游戏信息写入控制台｡
‫假设我们要写游戏的名字｡
‫CW第一场比赛｡
‫他的名字是然后是花括号0和游戏点名或者实际上是游戏一的名字｡
‫正如你所看到的, 你可以直接把它叫做变量, 这样我们就可以做同样的事情, 而不仅仅是名字｡
‫我们可以用其他的方法｡
‫所以我复制一下｡
‫第一个游戏是由开发的, 现在它不是游戏的名字, 而是开发者｡
‫这里也一样｡
‫收视率是第一场比赛｡
‫评分是, 这里是评分｡
‫最后, 游戏一被释放在游戏一重新发布日期｡
‫现在开始运行｡
‫控制红键, 看看发生了什么｡
‫而我们是一场游戏｡
‫一个叫口袋妖怪围棋｡
‫游戏一由Niantic开发｡
‫评分为3｡ 5, 并于2016年7月1日发布｡
‫好吧, 我会的
‫所以我们是｡
‫它是非常基本的, 与类非常相似｡
‫好吧, 我知道了
‫那么它有什么不同呢？
‫好吧, 还有一件事是一样的｡
‫因此, 我将创建公共void display, 它应该显示信息｡
‫我要做的就是在这里执行所有这些操作｡
‫所以它会给予我名字｡
‫它会给予我开发商｡
‫它会给予我评分和发行日期｡
‫好吧, 我会的
‫现在, 我可以简单地调用display方法, 方法是调用game 1, 然后说,
‫请显示所有信息.
‫现在我们再运行一次, 我们将看到我们得到了所有信息｡
‫好吧, 我会的
‫因此可以创建变量｡
‫您可以创建方法｡
‫但它有什么不同呢？
‫你不能做的是你不能创建一个构造函数｡
‫结构不能包含显式无参数构造函数｡
‫因此, 您无法在此处创建默认构造函数｡
‫然后它可以实现一个或多个接口｡
‫所以你可以在这里实现接口, 我可以清理, 我可以比较这些东西｡
‫则它们不支持继承｡
‫所以不能在结构体上使用继承｡
‫您不能有预设建构函式｡
‫正如我所说, 结构体成员不能被指定为抽象､ 虚拟或受保护的, 所以它们只能是公共的｡
‫所以你可以有一个公共结构体或者私有结构体｡
‫但是, 结构可以具有已定义的构造函数｡
‫比如说public game这里有一个字符串name.
‫您可以用这个和那个来命名, 或者这个名字等于名字, 这个点等于开发者｡
‫星星级是平等的评级｡
‫并且这个DOT发布日期等于发布日期｡
‫现在, 你, 当然, 需要有他们在这里｡
‫字符串开发商, 然后双评级和字符串发布日期｡
‫但是如果你想在这里显示display方法, 那么你会遇到一个错误, 因为使用了未赋值的局部变量game
‫one.
‫所以第一场比赛没有分配｡
‫所以即使我试过了, 比如说, 在得到了所有的信息之后, 你会发现仍然有一个错误｡
‫所以你需要有关于这个博弈的所有不同的信息, 一个被分配的信息｡
‫否则, 这出戏就行不通了｡
‫所以即使在这里, 在我们得到评级后, 我们仍然得到同样的错误｡
‫只有在我们已经分配了所有的值之后, 我们才可以工作｡
‫因此它是通过值来工作的, 而不是像类那样通过引用来工作的｡
‫好吧, 我知道了
‫所以如果你想有一个简短的总结, StackOverflow是你的朋友｡
‫所以简短地总结一下每个类的支持继承｡
‫我们的引用原型可以为空, 并且每个新实例的内存都超过堆｡
‫只有结构无法支援继承｡
‫我们的值类型是通过值传递的, 类似于整数, 因此不能有一个空引用, 正如你刚才看到的,
‫并且每个新实例都没有一个内存堆｡
‫两者都有复合数据类型, 通常用于包含一些具有某种逻辑关系的变量, 可以包含方法和事件,
‫并且可以支持接口｡
‫尽管西蒙·斯蒂芬斯认为类并不总是在堆和罢工中, 也不总是在堆栈中｡
‫好吧, 我会的
‫这个StackOverflow条目通常有很多关于结构体的有价值的信息｡
‫因此, 结构和类之间存在差异｡
‫但你在这里见过他们中的大多数｡
‫但像往常一样, 我总是建议查看文档以及获得更好的理解｡