【学习资料】html
> 在线文档数组
官方文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/ide
菜鸟教程:https://www.runoob.com/csharp/csharp-tutorial.html函数
> 视频教程学习
腾讯学院、Siki学院ui
【笔记】spa
根据学习资料,自学学习。3d
标识符命名指针
标识符必须以 字母、下划线(_) 或 @ 开头,后面能够跟一系列的 字母、数字(0-9)、下划线(_)、@。code
不能使用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
特殊运算符
对象类型(object)
全部类型的最终基类(包括值类型、struct、class)都是object。
装箱:将 值类型 转为 object
拆箱:将 objec t转为 值类型
装箱/拆箱会产生必定的消耗,尽可能少用。
访问修饰符
public | 全部对象 |
private | 只有本类的内部函数 |
protected | 本类及子类内部函数 |
internal | 同一程序集(dll) |
protected internal | 同一程序集(dll),或 其余程序集的子类内部函数 |
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} };
类(class)
base : 表示父类对象
父类初始化:在初始化列表里进行
C#不支持类的多继承,但能够继承多个接口(interface)
sealed:密封类,不能被继承
静态多态性
函数重载(不一样参数)
public Tabletop(double l, double w) : base(l, w) { }
运算符重载
public static Box operator +(Box b, Box c) { }
抽象类:abstract ,子类中重写函数 override
虚函数:virtual ,子类中重写函数 override
【扩展知识】
值类型 、引用类型 、ref
值类型:当形参值改变时,实参值不变;至关于 形参是实参的拷贝,是不一样的对象
引用类型:当形参值改变时,实参值也会改变;至关于 形参和实参,指向同一个对象,但形参和实参不是一个变量(相似指针变量)
引用传递ref:与“引用类型”区别在于,形参与实参是同一个变量(至关于取个别名)
class C { public int value = 0; } // 实参和形参是2个变量,但指向同一个对象 void changeC1(C c) { c.value = 10; c = new C(); c.value = 30; } // ref : 形参是实参的引用,是同一个变量 void changeC2(ref C c) { c.value = 10; c = new C(); c.value = 30; } // 调用 C m_c1 = new C(); // C m_c2 = new C(); // changeC1(m_c1); // 结果为 10 changeC2(ref m_c2); // 结果为 30
struct 、class
类 是 引用类型,结构体 是 值类型
所以结构体不能=null,也不须要使用new
结构体 不支持继承
结构体 不能声明 默认(无参)构造函数,不能声明 析构函数
结构体成员 不能指定为 abstract、virtual 或 protected
抽象函数(abstract) 、虚函数(virtual)
abstract:父类只声明没有具体实现,子类必须重写实现父类中的抽象函数
virtual:子类能够不重写父类的虚函数
抽象类(abstract) 、接口(interface)
抽象类:依然是一个类,不能被实例化,它仍然包含类的函数
接口:至关因而个规则,里面只能有方法、属性、索引、事件
抽象类:有抽象的方法,也有不抽象的方法。子类必须实现父类的抽象方法
接口:继承了接口后,全部的接口方法都必须实现
一个类只能继承一个父类,可是能够实现多个接口
二进制表示
位运算(& | ^ ~ << >>)
& 、| 、^ 、~ :符号位参与运算
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