大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: C#语法 修改讲义

复习:J&C:面向过程


类型

更丰富

除byte外,short/int/long都可以在类型前面加一个u,将其限定为整数。

uint count = -10;   //负数,报错

PS:所谓的u,unsigned,即在二进制数据中,没有为“正/负”进行标记

提供了更高精度的decimal:

    decimal height = 76.38M;    //不要忘了M后缀

推导类型var

你可能看到有这样的写法:

    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,会降低代码的可读性,尤其是当赋值的数据类型不能“一眼看穿(使用了方法等)”的时候。

函数类型转换

完全不相关类型间的转换需要使用函数:Convert.ToXXX() / Parse() /ToXXX(),
//大类之间通过函数进行转换
string strAge = "23";
float fAge = Convert.ToSingle(strAge);
int iAge = int.Parse(strAge);

注意:不是所有的数据都能“真正的”被转换

//strAge = "二十三";
//float wAge = Convert.ToSingle(strAge);  //无法转换,运行时错误

#体会#:运行时 vs 编译时错误


运算

PS:运算符优先级参考文档:Microsoft Doc

字符串

逐字字符串

字符串前加上@,可以取消转义,原样输出(简单理解)。

常用场景:

  • 文件路径,不用使用双反斜杠(\\)
    string path = @"C:\Users\86186\Desktop\每日工作";
  • 包含换行,不用使用\r\n
    string greet = @"源栈欢迎你,
    小九姐姐";
  • 两个双引号会“转义”成一个双引号
    string greet = @"源栈欢迎你,""小九""姐姐";

内插

字符串前加上$,就在字符串入一些变量,变量用花括号包裹,可以是字符串,也可以是其他类型:

string input = "小九姐姐";
int age = 23;
Console.WriteLine($"你好,{input}!源栈,欢迎{{您}}。{age}岁生日快乐");
如果要输出花括号本身,使用双花括号({{}})


多维数组

C#中真正的区分了交错(jagged)数组和多维(multi dimension)数组。

引入了新的语法:

  • 二维:平面2行3列
    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
}


作业

  1. J&C:面向过程作业中的重载方法设置默认值。
  2. 用真正的、等宽的二维数组重新完成J&C多维数组作业8

其他见:J&C:面向过程:更严格语法 / 多维数组 / enum / 方法重载



学习笔记
源栈学历
大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 C#语法 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码