复习:J&C:面向过程
除byte外,short/int/long都可以在类型前面加一个u,将其限定为正整数。
uint count = -10; //负数,报错
PS:所谓的u,unsigned,即在二进制数据中,没有为“正/负”进行标记
提供了更高精度的decimal:
decimal height = 76.38M; //不要忘了M后缀
你可能看到有这样的写法:
var /*不是string*/ greet = "源栈欢迎你!"; var /*不是int*/ fee = 986;
咦,var,这不和JavaScript一样了么?为什么又可以作为字符串(string)greet的类型声明,又可以作为整数(int)fee的类型声明?
#常见面试题:是不是使用var定义的变量就是“类型可变”,是“弱类型”的?#
错!由关键字var定义的变量,仍然是强类型变量。它其实就是一个“语法糖”(即方便了代码的书写,但没有在语法本质上进行改变),又被称之为“推导类型”,即:
由var定义的变量,其类型是由赋值数据类型决定的,或者说,C#编译器会自动推导出其类型。
所以,上述代码中,greet就是string类型,fee就是int类型。而且他们一旦被定义,就不能再更改。
另一个证明,使用var声明的变量必须理解赋值:
var greet; //报错:greet未被赋值,无法推导其类型
但是,飞哥不建议在任何时候都使用var,甚至要求同学们只能在特定情况下才能使用var。因为滥用var,会降低代码的可读性,尤其是当赋值的数据类型不能“一眼看穿(使用了方法等)”的时候。
//大类之间通过函数进行转换 string strAge = "23"; float fAge = Convert.ToSingle(strAge); int iAge = int.Parse(strAge);
注意:不是所有的数据都能“真正的”被转换
//strAge = "二十三"; //float wAge = Convert.ToSingle(strAge); //无法转换,运行时错误
#体会#:运行时 vs 编译时错误
字符串前加上@,可以取消转义,原样输出(简单理解)。
常用场景:
string path = @"C:\Users\86186\Desktop\每日工作";
string greet = @"源栈欢迎你, 小九姐姐";
string greet = @"源栈欢迎你,""小九""姐姐";
字符串前加上$,就在字符串内部插入一些变量,变量用花括号包裹,可以是字符串,也可以是其他类型:
string input = "小九姐姐"; int age = 23; Console.WriteLine($"你好,{input}!源栈,欢迎{{您}}。{age}岁生日快乐");如果要输出花括号本身,使用双花括号({{}})
C#中真正的区分了交错(jagged)数组和多维(multi dimension)数组。
引入了新的语法:
int[,] mda = new int[2, 3];
int[,,] mda = new int[2, 3, 4];
声明时整体赋值:
int[,] mda = { { 1, 2, 3 }, { 4, 5, 6 } };
也可以对某一个元素赋值/取值
mda[0, 1] = 9; Console.WriteLine(mda[1,1]);
获取长度和维度,以及某一个维度中元素的个数
Console.WriteLine(mda.Length); //6 Console.WriteLine(mda.Rank); //2 Console.WriteLine(mda.GetLength(1)); //3,一维的长度
PS:C#中交错数组的直接初始化赋值:(对比Java)
int[][] mutrix = { new int[] { 1, 2 }, new int[] { 3, 4, 5 }, new int[] { 6, 7, 8, 9 } };
C#中枚举是基于整数的,或者说,底层实现依赖于整数。所以:
可以在枚举和整数类型间双向转换
Console.WriteLine((int)DayOfWeek.Wednesday); Console.WriteLine((DayOfWeek)3);也可以在枚举声明时指定其整数类型和整数值(默认是从0开始的int类型,按1递增)
enum Skill : short { CSharp = 10, Java = 11, SQL = 12, JavaScript //不声明,默认自增1 }
其他见:J&C:面向过程:更严格语法 / 多维数组 / enum / 方法重载
多快好省!前端后端,线上线下,名师精讲
更多了解 加: