我们在上一篇正式整理完毕,从这一篇开始,我们要再次进入学习收集示例阶段了。 那么我们学什么呢?当然是学习设计工具,也就是在上篇中提到的关键知识点。这些关键知识点,大部分来自于 C# 语法。 不过在此之前,我们先实现一个功能,这个功能是,传入几个数字,随机取出其中一个数字。 比如传入 1,3,5,7 从这四个数字中随机取出一个数字出来。 其实现很简单 代码如下: 传入一个,int 数组,从 int 类型数组中随机取一个数值进行返回。 用法也很简单,使用代码如下: 但是随着时间发展,我们有时候会需要随机获取其他类型值,比如从一个 float 类型的数组中随机取回一个 float 值,或者是从 string 类型的数组中取回一个值。 难道我们要每个类型都实现一次嘛? 如果都实现一次的话,会增多很多重复结构的代码,注意看这里是重复的结构。 什么叫重复的结构,以下代码就是三个重复结构的方法。 虽然对初学者来说,知道把方法做成工具类已经很不容易了,但是以上这样的代码肯定是不行的。 所以就要学习新的知识,但是笔者接下来要说的这个知识大家应该很熟悉了。 就是面试中常问的:面向对象的特性? 而我们要用其中的继承特性。 我们先复习一下继承:B 继承 A,那么 B 对象就可以拥有 A 中的 public、protect 方法和成员变量。 继承的本质是,什么是什么的问题,比如 B 继承 A,那么我们可以使用 A 变量去接收 B 对象。 这样的的代码是没问题的。 虽然以上代码和多态性有一点关系,不过我们只要记住,父类的变量可以接收子类的实例这个结论就好了。 那么对我们的问题有什么帮助呢? 我么再来看下问题代码: int、string、float 如果有一个共同的父类,那么就可以用一个共同的父类,作为参数的类型。 那么 int、string、float 有没有共同的父类?答案是有的,它们共同继承了 object 类。不止是int、string、float,C# 中的所有类型都继承了 object 类。 我们有了答案,可以进行更改了,改完的代码如下: 我们看下使用的代码 使用的代码虽然比较难看(1.强制类型转换;2.再加上每次传入参数都要构造数组;) 使用上有一点麻烦,不过还好,我们最起码解决了结构重复的问题,而且我们还复习了一下继承。 当然除了使用 object 接收,还有更好的方法-使用泛型。之所以先介绍 object ,是因为,笔者在没接触泛型之前,都是这么搞的,这样搞其实还有个问题,就是值类型转引用类型会造成效率问题,不过这些问题下一篇再解决,更重要的是,我们今天的问题得到了进展,这是很值得开心的。 今天的内容就这些,我们下一篇再见。 转载请注明地址:凉鞋的笔记:liangxiegame.com QFramework 地址:https://github.com/liangxiegame/QFramework QQ 交流群:623597263 Unity 进阶小班: 关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。
第四章 简介
方法的结构重复问题
using UnityEngine; namespace QFramework { public partial class MathUtil { public static int GetRandomValueFrom(int[] values) { return values[Random.Range(0, values.Length)]; } } }
var randomValue = GetRandomValueFrom(new int[] {5, 100, -1, -3, 5});
public static int GetRandomValueFrom(int[] values) { return values[Random.Range(0, values.Length)]; } public static string GetRandomValueFrom(string[] values) { return values[Random.Range(0, values.Length)]; } public static float GetRandomValueFrom(float[] values) { return values[Random.Range(0, values.Length)]; }
答:封装、继承、多态。
复习完了。。。
代码如下:class A { } class B : A { } A a = new B();
public static int GetRandomValueFrom(int[] values) { return values[Random.Range(0, values.Length)]; } public static string GetRandomValueFrom(string[] values) { return values[Random.Range(0, values.Length)]; } public static float GetRandomValueFrom(float[] values) { return values[Random.Range(0, values.Length)]; }
public static object GetRandomValueFrom(object[] values) { return values[Random.Range(0, values.Length)]; }
var intRandomValue = (int)GetRandomValueFrom(new int[]{1,2,3}); var stringRandomValue = (string)GetRandomValueFrom(new string[]{"asdasd","123123"}); var floatRandomValue = (float)GetRandomValueFrom(new float[]{ 0.1f,0.2f });
更多内容
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算