知识涉及:Unity
更新日期:2021/6/25
更新内容:复杂变量类型
变量和数据类型 要点
某自定义脚本中,有以下自定义变量:public int a=1;
。在 Inspector面板 中将该值手动改为2,随后在脚本中将该变量的初始值改为3,随后点击运行,在游戏中该值被改为4,程序停止后,a的值是多少?
A. 1
B, 2
C. 3
D. 4
答案解析:
- Unity在运行过程中以Inspector窗口中的数据为第一数据
下列选项中,哪个是引用类型?
A. char
类型
B. double
类型
C. string
类型
D. int
类型
答案解析:
- C#数据类型包括 值类型 和 引用类型
- 值类型包括 枚举、结构体(数值类型、bool、char)
- 引用类型包括 类(委托、数组、字符串)、接口
在C#中,下列代码运行后,变量c
的值是
int a = 15,b = 10;
float c = (float)a / b;
A. 0
B. 1
C. 1.5
D. 5
答案解析:
-
(float)a
:将a
转换为float
类型,float(a)/b
按照浮点型除法进行计算。
现有一个名为Teacher的结构,由于封装教师的信息,现在要编写一个方法用于更新Teacher中的一个属性ServiceYears
,下面___方法声明是正确的?
A. static void UpdateYears(Teacher t)
B. static void UpdateYears(Teacher[] t)
C. static void UpdateYeats(int t)
D. static void UpdateYears(ref Teacher t)
答案解析:
-
ref
形参,操作的是同一个变量,会改变值。
在C#中,一下关于readonly
与const
用法的代码,正确的是
A. const Person person = new Person();
B. const Person person = null;
C. class Person { public Person() { readonly string name = "张三";}}
D. public const int age;
答案解析:
-
const
修饰字段必须有初始值。 - 初始值限制只能用
null
对引用类型(字符串除外)的常量字段进行初始化
装箱是把值类型转换到___类型。
A. 数组
B. 引用
C. char
D. string
答案解析:
- 装箱:将值类型包装为引用类型
- 拆箱:将引用类型拆箱为值类型
C#的数据类型有数值类型和___类型两种
A. 结构类型
B. 关系类型
C. 调用类型
D. 引用类型
答案解析:
- 值类型:包括 简单值类型 与 复合型值类型
简单值类型:细分为 整数类型、字符类型、实数类型、布尔类型
复合值类型:简单值类型的复合,如 结构类型 与 枚举类型 - 引用类型:包括 类、接口、委托、数组
类:一组具有相同数据结构与数据操作的对象集合。
接口:应用程序之间互相调用,须达成一协议,被调用的一方在协议中对自己所能提供的服务进行描述。
委托:用于封装某个方法的调用过程。
数组:用于同一数据类型的数据进行批量处理。
在C#中,下面类型中是引用类型的是
A. DualogResult
枚举
B. System.Double
C. string
D. int
答案解析:
- 引用类型包括:类、接口、string
- 值类型包括:结构、枚举
执行以下C#程序,将输出
public class Student {
public int age;
}
public class Program {
static void Alter(string id,Student stu) {
id = "1002";
stu.age++;
}
static void Main() {
Student stu = new Student();
string id = "1001";
stu.age = 18;
Alter(id,stu);
Console.WriteLine("id = {0},age = {1}", id, stu.age);
}
}
A. id=“1001”,age=18
B. id=“1001”,age=19
C. id=“1002”,age=18
D. id=“1002”,age=19
答案解析:
-
string id = "1001";
在传入Alter()
后id覆写为"1002"
,stu.age = 18;
传入Alter()
后stu.age++
为19。 - 由输出结果为
id="1001",age=19
;
(多选题)以下代码中属于拆箱操作的有
A. string name = (string)obj;
B. float score = Single.Parse(obj.ToString());
C. int age = Convert.ToInt32(obj);
D. double.salary = int.Parse(6.ToString());
答案解析:
- 装箱:将值类型包装为引用类型的过程
- 拆箱:将引用类型转换为值类型的过程
拆箱将对对象强制转换为原来的类型。拆箱的值必须和其转换的目标的变量有相同的类型。
数据类型转换 要点
窗体中有一个年龄文本框 txtAge,下面代码可以获得文本框中的年龄值的是
A. int age = txtAge;
B. int age = txtAge.text
C. int age = Convert.ToInt32(txtAge);
D. int age = int.Parse(txtAge.text);
答案解析:
- 文本是
string
类型,应使用int.Parse()
强制转换为int
类型
下面C#代码片段中,属于装箱的是
A. Object value = 8;
B. int i = (int)o;
C. int i = 8;
D: string s = "abc";
答案解析:
- 装箱:将值类型包装为引用类型
- 值类型隐式转换:
object
类型或由此值类型实现任何接口的过程。
内部机制:在堆中开辟内存空间 -> 将值类型数据复制到堆中 -> 返回堆中新分配对象的地址。
将变量从字符串类型转换为数值类型可以使用的类型转换方法是
A. string()
B. char()
C. ToString()
D. int.Parse()
答案解析:
-
string()
:强制转换为string
类型 -
char()
:同上 -
ToString()
:将其他类型转换为字符串类型。 -
int.Parse()
:将数字的字符串转换为等效的32位有符号证书
控制语句 要点
下面哪些不是循环语句?
A. while
B. do...while
C. for
D. if...else
E. foreach
答案解析:
-
if...else
属于条件判断语句
在C#语言的循环结构中,首先执行一次,然后再判断条件的循环结构是
A. while
循环
B. do...whlie
循环
C. for
循环
D. foreach
循环
答案解析:
-
while
循环:判断条件,若不成立,执行循环体代码,进入下一次条件判断。成立则跳出循环。 -
do..while
循环:先执行循环体代码,再判断,若判断成立,再次循环执行代码内容,直至判断错误。
在C#的条件判断语句switch-case
结构中,每个case
条件分支中都必须包含的 子句是
A. else
B. break
C. default
D. continue
答案解析:
-
default
仅出现于最后,有时不会出现,与case
同级。 - 每一
case
种必须包含break
关于continue
和break
,以下说法正确的是?
A. break
是中断本次循环
B. continue
是中断本次循环,进入下一次循环
C. break
是中断本次循环,进入下一次循环
D. continue
是中断整个循环
答案解析:
-
break
是退出当前循环体 -
continue
是结束本轮次循环,进入下一次循环
复杂变量类型 要点(新增)
在C#中,下述哪个类型不可以直接在命名空间内声明?
A. 数组
B. 接口
C. 结构体
D. 委托
答案解析:
- 变量严格定义在类中。即数组不可在命名空间内声明。
有说明语句double[,] tab = new double[2,3];
那么下面叙述正确的是
A. tab
是一个数组维数不确定的数组,使用时可任意调整。
B. tab
是一个由两个元素的一位数组,它的元素初始值分别为 2、3
C. tab
是一个二维数组,它的元素个数一共有6个
D. tab
是一个不规则数组,数组元素可数可变化
答案解析:
- 二维数组本质:以一维数组作为数组元素的列表。如
tab[2, 1]
指的是tab表第2行第1列元素。 - 数组:(1)空间大小确定;(2)不可扩容或减容;
程序中有枚举定义 public enum Level { easy, normal, hard }
,请查看下面的代码,其运行结果为
public class EnumTest{
public Level level;
public static void Main(){
EnumTest test = new EnumTest();
test.level = (Level)3;
Console.WriteLine(test.level);
}
}
A. easy
B. 编译错误
C. 运行错误
D. 3
答案解析:
- 枚举中各枚举项对应数值,默认从头至后按自然数从小到大排序。
- 强转数值为枚举类型,仅枚举中存在该数值下,返回该枚举项;反之,返归原数值。
请问经过表达式 a=3+1>5?0:1
的运算,变量a的最终值是什么?
A. 3
B. 1
C. 0
D. 4
答案解析:
- 条件判断语句
b ? x : y
若b成立,返回值x;反之返回值y。
关于交错数组的说法正确的是
A. 交错数组的行数与列数固定
B. 声明交错数组的语法是 类名[,] 变量名
C. 交错数据初始化语法是 变量名 = new 类名[][];
D. 交错数组可以自动扩充数组长度
答案解析:
- 交错数组:行数固定、列数不固定。每行需初始化,且不可扩充。
声明语法类名[][] 变量名
。 - 二维数组声明
类名[,] 变量名
定义一个数组,正确的代码为?
A. int[] array = new int[5]
B. int[] array = new int[5]
C. int array = new int[];
D. int[5] array = new int;
答案解析:
- 数组定义遵循三步骤:声明 -> 开辟空间 -> 赋值
在C#中,使用下列哪个关键字来定义结构?
A. static
B. struct
C. abstract
D. enum
答案解析:
-
static
静态 、struct
结构体 、abstract
抽象 、enum
枚举
关于数组pins
的定义int[] pins=new int[4]{9,2,3,1};
则pins[1]的结果为
A. 1
B. 2
C. 3
D. 9
答案解析:
- 数组在声明和初始化后,可使用所引起进行访问。索引开头从0开始,即第一元素。
假定一个10行20列的二维整型数组,下列哪个定义语句正确的是
A. int[] arr = new int[10, 20];
B. int[] arr = int new[10 ,20];
C. int[,] arr = new int[10, 20];
D. int[,] arr = new int[20; 10];
答案解析
- 二维数组
A[m][n]
,这是一个m行,n列的二维数组
下面关于类和结构体的说法,错误的是
A. 类可以被继承,而结构体不可以
B. 类可以用new
创建对象,而结构体不可以
C. 类是引用类型,而结构体不可以
D. 类中可以直接给字段赋予初始值,而结构体不可以
答案解析:
- 结构体隐式密封,不可作为基类在派生出其他结构,不可从类派生。仅可从接口派生。
- 结构体中构造函数不可删除或重定义。不会因为定义其他函数而消失。
- 结构体可用
new
创建对象