知识涉及: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
创建对象