http://blog.sysuschool.com/u/mygod/index.html
请稍候,载入中。。。
 
请稍候,载入中。。。
2022/10/29 10:19:00
博文_总结学习C#_基础篇


从本篇开始总结C#的学习,C#语言源于C++,是非编译的脚本语言,属于微软的语言,是点NET框架语言,据说改进了C++的容易出错的语法。上篇我聊了我学C#的原因,其中一个重要原因是间接了解C++,这个理由很牵强,其实根本原因是那个C++的ide,那个Dev太弱了,一点都不友好,加上学习unity3D游戏引擎的需要,我选择学习C#,好了,开始总结C#初级篇,所谓初级,没有定义的,自己认为的,主要是从数据类型到函数定义。

 

我认为的初级篇,主要包括:变量、数据类型、数据类型转换、基本字符串、运算符、表达式、结构语法(分支、循环)、函数,今天就总结这些,主要总结与JavaScript和python的不同之处。

 

一、变量、数据类型

C#初级篇的数据类型,除了 Byte、int、float、double、string、bool、char外,复杂类型的有 enum枚举、struct结构体、数组等,不常用的不列举了。因为C#变量需要指定数据类型,但有时,在一些场合不确定数据类型,C#提供了一个泛型数据类型。

 

C#的变量声明,是需要指定数据类型的,这点与Js和python不同,其中可使用 var关键字匿名声明,到这里,才明白 js 声明变量的关键字 var的由来(呵呵),在C#中凡是需要首次用到变量的地方,声明变量都要在变量名前指定数据类型,如声明变量、传入的函数参数变量、接收的函数返回值变量,for循环的启始值变量等等。不要小看了这点不同,初次接触,感觉难度是学python的十倍(有点夸张),很庆幸自己先学js、再学python,前者因为要结合前端布局(浏览器兼容性问题很麻烦),比较复杂,但相比C#,语法更简洁,后者 python则不用说,太亲民了!如果一开始学的是C#,够头疼的!

 

C#的数据类型转换,因为变量需要指定数据类型,比python更麻烦,python很多场合是自动转换,C#则比较严格,隐式转换发生在小盒子放入大盒子的情况,大盒子放入小盒子就要用显式转换了,一种是数据前用(类型),一种用Convert类提供的方法,说到数据类型,后面学到类,自己定义的类,实例化出来的对象,也要强调其数据类型,是自己定义的类名,如定义一个Cat类,实例了一个cat对象,cat对象这个数据,其类型是Cat。

 

C#的复杂数据类型,枚举enum、结构struct,是一个新概念,但理解难度不大,不细说了。倒是C# 数组,与我理解的其他语言不同,这有点困惑,在其他语言中,数组属于Array类,是可以添加删除元素的,C# 的数组可以修改元素值、可以排序,但不能添加删除元素,但另外又提供了几个集合类,如Array类、ArrayList类、SortList类等,ArrayList类对象更像其他语言所说的数组,可以添加删除元素,Array类是不是就是数组,这点有点困惑,仅知道定义数组用不到Array类,但Array类提供的几个方法可以用给数组,如|Array.Copy方法,很奇怪,直接这么用着先!数组的定义,用数据类型名+[]一对中括号,这个数据类型名可以是int、string、char等,也可以是类名,如Cat[],自己定义的猫类,如

Cat[] cats=new Cat(){ new Cat(“”, xx), new Cat(“”, xx), … };

 

二、运算符、表达式

C#的这部分,与其他语言不同之处不多,python不支持++--jsC#支持,同js一样,要注意前++与后++的不同,与js一样的还有,C#支持三元运算符xxxxxx,好熟悉的味道!另外,加减乘除要注意,运算符两端是什么类型,结果也是什么类型,如int5除以int2,结果是2

 

三、结构语法

结构语法指分支和循环语法,同 js,分支有if  else if elseswith case,循环有whiledo whileforforeach(同pythonfor循环),python只有forwhile循环,if elif else分支。

不同的地方,还有就是结构中出现的变量,需要指定数据类型,属于局部变量,有时不愿意写数据类型,如自己定义的类,不想用类名声明变量,可用 var匿名指定。

 

四、函数

C# 的函数定义,修饰符+返回值类型+函数名+(参数类型 参数名){ 函数体代码 }

由于C#的入口函数Main方法定义在Programe类中,其实函数的定义发生在类中,感觉一般把函数叫做方法的比较多。

修饰符主要有public公有、private私有、static静态等,总结面向对象的时候再说。

定义函数要指定返回值类型,如果无返回值,用void

函数名要符合标识符的要求,一般用pascal命名法,即单词首字母大写。

函数的参数,也要指定类型(可以是泛型,泛型后面总结),不确定参数长度时,可以传入一个数组,如int[] nums,在数组前加params关键字,这个叫做参数数组,在调用函数,传参更方便(直接输入多个数据,逗号隔开,不用写成数组方式)。

值得一提的是C#支持函数重载,即定义几个相同名字的函数,但传参和返回值不同,编译器会根据传参的不同,自动调用不同的函数。

另外,关于局部变量的问题,函数可以调用函数外的变量,但不能修改(自定义的类,好像有点不一样,有点困惑),可以在函数参数前加ref关键字,表示传入的是引用外面的变量,这样可以改变外部变量,就像改变引用型变量一样,如数组,因为数组是引用的,如果传入到函数,在函数内修改的话,外面的数组是变化的。

还有递归调用函数自己,与其他语言没有区别。

最后是关于constonlyread常量,与python完全不同,这个在类的总结再说说。

 

这篇就总结这些,下篇总结中级篇。

mygod | 阅读全文 | 回复(0) | 引用通告 | 编辑
发表评论:
请稍候,载入中。。。
公告
请稍候,载入中。。。
时间记忆
请稍候,载入中。。。
最新日志
请稍候,载入中。。。
最新评论
请稍候,载入中。。。
最新回复
请稍候,载入中。。。
我的好友
我的相册
站点信息
请稍候,载入中。。。
生活因感动而精彩,理想在创造中放飞
Powered by Oblog.