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 但不需要在声明时初始化 不需要编译时决定