【Unity|C#】基础篇(1)——基础入门
【学习资料】
《C#图解教程》(第2~12章):https://www.cnblogs.com/moonache/p/7687551.html
电子书下载:https://pan.baidu.com/s/1mhOmBG0
【内容】
- 标识符命名
- 值类型及取值范围
- 栈与堆(数据存储方式)
- 特殊运算符
- 对象类型(object)
- 访问修饰符(public、private、protected、internal)
- 可空类型(?、??、Nullable)
- 数组
- 一维数组
- 二维数组(矩形数组)
- 交错数组(每行个数可不同,单独new)
- 扩展知识
- 字符串的@
- 值类型、引用类型、ref 的区别
- 二进制表示
- 位运算溢出问题
- 扩展知识
【笔记】
标识符命名
标识符必须以 字母、下划线(_) 或 @ 开头,后面可以跟一系列的 字母、数字(0-9)、下划线(_)。
不能使用C#保留的关键字,如 if,但可以为 @if
值类型及取值范围
常量前缀指定基数
十进制:没有前缀
十六进制:0x 或 0X 。如:0x10 表示 十进制 16
八进制:0 。如:010 表示 十进制 8
二进制:0b 。如:0b10 表示 十进制 2
常量后缀指定精度(U 和 L 分别表示unsigned和long)
u 或 U : 10U 表示 uint
l 或 L : 10L 表示 long
LU组合: 10LU 表示 ulong
- 栈与堆(数据存储方式)
传送门:https://www.cnblogs.com/shahdza/p/12236770.html
特殊运算符
对象类型(object)
所有类型的最终基类(包括值类型、struct、class)都是object。
装箱:将 值类型 转为 object
拆箱:将 objec t转为 值类型
装箱/拆箱会产生一定的消耗,尽量少用。
访问修饰符
public | 所有对象 |
private | 只有本类的内部函数 |
protected | 本类及子类内部函数 |
internal | 同一程序集(dll) |
protected internal | 同一程序集(dll),或 其他程序集的子类内部函数 |
- 可空类型(Nullable、?、??)
int? i = 3 等同于 Nullable<int> i = new Nullable<int>(3)
int i; // 默认值为0
int? i; // 默认值为null
合并运算符(??):num3 = num1 ?? 5.34; // num1 如果为空值则返回 5.34
数组(Array)
一维数组:int[] numbers = new int[10];
初始化:= new int[] {1, 2, 3, 4, 5};
初始化:= {1, 2, 3, 4, 5};
二维数组:string[,] names = new string[5, 4];
每行个数固定相同(都是4)
初始化:= { {"a", "b", "c", "d"} , {"e", "f", "g", "h"} };
交错数组:byte[][] scores = new byte[5][]
scores[i] = new byte[i + 3]
每行个数可以不同
初始化:= {new int[]{1,2,3} , new int[]{1,2,3,4} };
- 不同数组示意图
- 二维数组和交错数组的内存结构
【扩展知识】
- 字符串的@
- @(称作"逐字字符串")将 转义字符(\)当作普通字符对待
- 如:
- @"Hello \n World" : 其中\n不会被转义,而是单做普通字符处理;
- 路径:@"C:\xxx\xxx.doc" 等价于 "C:\\xxx\\xxx.doc"
- 如果要在@的字符串中使用双引号("),需要用2个双引号"" (而不是 \")
- 如:
值类型 、引用类型 、ref
值类型:当形参值改变时,实参值不变;相当于 形参是实参的拷贝,是不同的对象
引用类型:当形参值改变时,实参值也会改变;相当于 形参和实参,指向同一个对象,但形参和实参不是一个变量(类似指针变量)
引用传递ref:与“引用类型”区别在于,形参与实参是同一个变量(相当于取个别名)
class C
{
public int value = ;
}
// 实参和形参是2个变量,但指向同一个对象
void changeC1(C c)
{
c.value = ;
c = new C();
c.value = ;
}
// ref : 形参是实参的引用,是同一个变量
void changeC2(ref C c)
{
c.value = ;
c = new C();
c.value = ;
} // 调用
C m_c1 = new C(); //
C m_c2 = new C(); //
changeC1(m_c1); // 结果为 10
changeC2(ref m_c2); // 结果为 30
二进制表示
位运算(& | ^ ~ << >>)
& 、| 、^ 、~ :符号位参与运算
1 & -1 = 1
1 | -1 = -1
1 ^ -1 = -2
-1 ^ -8 = 7
~1 = -2
~-1 = 0
~-8 = 7
<< :符号位参与运算;高位丢弃,低位补0
-2147483646 << 1 = 4
-2147483646 << 29 = 1073741824
-2147483646 << 30 = -2147483648
-2147483646 << 31 = 0
-2147483646 << 32 = -2147483646
-2147483646 << 33 = 4
>>
有符号:
C# :补符号位(算术右移)
C++:各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
无符号:高位补0
-1 >> 1 = -1
-1 >> 2 = -1
-127 >> 1 = -64
-127 >> 6 = -2
-127 >> 7 = -1
-127 >> 8 = -1
-127 >> 31 = -1
-127 >> 32 = -127
-127 >> 33 = -64
【Unity|C#】基础篇(1)——基础入门的更多相关文章
- 1.基础篇之vue入门
为了建立高效团队,很多公司会采用全栈工程师,虽然利弊兼有,对于成本优先的创业团队,肯定是首选,特别是对.net生态圈,大部分都是小公司,就更加重要了.这里记录的是对vue的学习点滴,希望对你有所助力. ...
- iOS开发基础篇-Button基础
一.简单介绍 UIButton 的功能:响应用户操作.显示文字.显示图片.调整内部图片和文字的位置. 二. UIButton 的状态 UIControlStateNormal :普通状态,为默认情 ...
- SpringBoot基础篇-SpringBoot快速入门
SpringBoot基础 学习目标: 能够理解Spring的优缺点 能够理解SpringBoot的特点 能够理解SpringBoot的核心功能 能够搭建SpringBoot的环境 能够完成applic ...
- JavaSE基础篇—MySQL基础知识点
MySQL MySQL是一种关系数据库管理系统,是一种开源软件.可搭配PHP和Apache可以有更好的性能,也可以工作在众多的平台上.Orcale是一个数据库创建多个用户,MySQL是一个用户创建多个 ...
- Python学习之路基础篇--08Python基础+ 文件的基本操作和 注册小作业
1 文件的基本操作 #1. 打开文件的模式有(默认为文本模式): r ,只读模式[默认模式,文件必须存在,不存在则抛出异常] w,只写模式[不可读:不存在则创建:存在则清空内容] a, 只追加写模式[ ...
- python基础篇_002_基础数据类型
Python基础数据类型 1.int # int 用于计算 num = 3 # int 与其他数据类型转换 int_to_str = str(num) # 数字加引号 print(int_to_str ...
- Python学习之路基础篇--02Python基础+小作业
1 变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码调用.必须由数字,字母,下划线任意组合,且不能数字开头.不能是python中的关键字,如['and', 'as', 'assert', ...
- Extjs 基础篇—— Function基础
这里主要是JS的基础知识,也是深入理解Ext的基础.1.参数可变长,注意跟Java还是有一点区别的.例: 1.function getUser(name,age){ 2.alert("nam ...
- 学习笔记三:基础篇Linux基础
Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...
随机推荐
- [redis读书笔记] 第一部分 数据结构与对象 链表
二 链表 1.链表节点使用ListNode结构,是一个双向的链表,同时,还实现了一个控制所有ListNode的结构list: typedef struct listNode { // 前置节点 str ...
- Postman之命令测试
前言 今天我们来学习一下Postman的命令行测试 1.先安装node.js ,https://nodejs.org/en/#home-downloadhead 2.安装cnpm npm instal ...
- 连接数据库方法---DAO,RDO,OLE,ADO
2012-12-14 09:40 (分类:计算机程序) DAO (Data Access Objects) 提供了一种通过程序代码创建和操纵数据库的机制.最大特点是对MICROSOFT JET(Jet ...
- CentOS7.3下yum安装MariaDB10.3.12并指定utf8字符集
添加MariaDB的yum源,指定安装的版本,然后使用 yum 工具进行安装 参考MariaDB官方网站对应安装方法和步骤 https://downloads.mariadb.org/mariadb/ ...
- Android O 8.0 奥利奥
Android O 8.0 奥利奥 1.画中画, 2.智能文本选择(Smart Text Selection), 3.notification dots, 4.自动填写(Auto-Fill) 4. ...
- codewars--js--the highest and lowest number + JS 字符串和数组相关知识
本文参考: http://blog.csdn.net/tyrionj/article/details/78653426 http://www.runoob.com/jsref/jsref-obj-st ...
- dict的使用
Python字典是可变类型数据,可以存储任意对象,如字符串,数字,元组,列表等. 字典的创键 字典有键key和值value组成,使用键值对链接:,字典也称为关联数组或哈希表. dict_person ...
- XAML 字符转义
在 写xaml的使用遇到了一些特殊字符,这里记录一下特殊字符转义. 这些特殊字符遵循用于编码的万维网联合会(W3C) XML 标准. 下表显示这组特殊字符的编码语法: 字符 语法 描述 < & ...
- C# 利用委托事件进行窗体间的传值(新手必看)
引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ...
- linux中shell内置命令和外置命令
shell内置命令 无法通过which或者whereis去查找命令的位置 例如cd,cp这些命令是shell解释器内置的命令 当shell内置命令传入shell解释器,shell解释器通过内核获取相关 ...