char[] allMagics = new char[9];
char[] allMagics = new char[9]{.....};
 
int[,] cells = {{1,0,2},{1,2,0},{1,2,1}};
int[,] squareCrystal = new int[2, 3];
int[,,] cubeCrystal = new int[2, 3, 4];
squareCrystal[0, 2] = 5;
 
float[][] crossCrystal = new float[3][];
crossCrystal[0] = new float[3];
crossCrystal[1] = new float[4];
int[][] cells = {new int[]{1,0,2,0},
				 new int[]{1,2,0},
				 new int[]{1,2},
				 new int[]{1}};
cells[1][0] = 1;
 
string[] languages = {"C#","COBOL","JAVA","C++"};
 
string[] languages;
languages = new string[]{"C#","COBOL","JAVA","C++"};

System.Array.Sort(array)

System.Array.BinarySearch(array,target)

System.Array.Reverse(array)

System.ArrayClear(array,start index,length)将一块区域设置为默认值

bool[,,] cells = new bool[2,3,3];
cells.GetLength(0);//长度 2
cells.Rank//维度 3

字符串,支持+拼接其他类型

字符串前使用@,表明转义序列不被处理,并且能逐字解释所有空白字符。

字符串前使用$,并将表达式嵌入大括号中

也可以在$前使用@

string转换成其他类型

string text = "9.11E-31";
float kgElectronmass = float.Parse(text);

其他类型转换成string

bool isMiddle = true;
string text = isMiddle.ToString();

System.Convert类型转换

enum Gender{
	Male, Female, Other
}
Gender gender = Gender.Female;

struct中默认private,可以在结构体里定义方法

struct是值类型

原始类型和引用类型

引用类型按值传递和引用传递

引用传递可以修改引用类型本身(指针?)指向的地址,按值传递只能读取地址修改堆上的内容

标识符

字母 下划线

数字不能在首位

@只能首位

格式字符串

Write和Writeline中使用

Console.WriteLine("Two sample integers are {0} and {1}.", 3, 6);

{0}称为替代标记 值可以被多次使用

引用出界发生运行时错误

{index, alignment:format}

alignment左右对齐

format格式字段 由格式说明符和精度说明符组成

字符串插值

C#6.0

Console.WriteLine($"Two sample integers are {var1} and {var2}.");

数值类型不具有布尔意义

类声明结束无分号

字段初始化

class MyClass{
	int F1;//使用默认值
	int F2 = 25;//使用初始化值
}

初始化值编译时需能确定

为类对象数据分配内存

new TypeName()

类成员默认private

局部常量必须初始化,初始化值能编译时决定

C#7.0可以在一个函数内声明另一个函数,只能在该方法内调用

值参数

在栈中为形参分配空间,复制实参的值给形参

引用参数

在调用中也要使用ref修饰,实参必须是变量,在用作实参前被赋值

不分配内存,起别名

输出参数

在调用中也要使用out修饰,实参必须是变量

不分配内存,起别名

方法内部需先给其赋值才能访问它

返回前必须赋值

C#7.0不需要预先声明变量作out参数

参数数组

只能有一个参数数组,必须在最后

声明
void ListInts( params int[] inVals )
调用
ListInts( 10, 20 ,30 );
 
int[] intArray = {1, 2, 3};
ListInts( intArray );

如果没有实参,创建零个或一个元素的数组

别名

ref int y = ref x;
ref int RefToValue(){
	return ref Score;
}
ref int x = ref xxx.RefToValue();

要求ref return不能返回空值,常量,枚举成员,类或结构体的属性,指向只读位置的指针

只能返回原先调用域中的

ref局部变量只能被赋值一次

命名参数

int Calc(int a, int b, int c){}
xxx.Calc(c:2, a:4, b:3);

与位置参数同时使用时,位置参数必须全部出现在前

可选参数

默认值必须在编译时确定,引用类型null

顺序必须依次为必填参数,可选参数,params参数

省略不能任意组合,只能省略最后n个参数

如果要任意省略,需要使用命名参数

const

必须初始化且编译时确定

成员常量

编译时被替换 没有存储位置

没有类实例也能访问 不能声明为static

属性
 

属性本身没有存储什么,set访问器有一个隐式值参value

不能显式调用属性

属性是函数成员

可以声明为static

自动实现属性
public int MyValue{
	set;get;
}

静态构造函数

只能有一个 不能带有参数 不能有访问修饰符 自动调用

对象初始化语句

new TypeName {};
new TypeName() {};//先构造函数

初始化的值必须是public的

readonly

修饰字段 类似const 但不需要在声明时初始化 不需要编译时决定