首先工欲善其事,必先利其器。
一,开发环境安装
下载安装visual stdio 2017

安装好开发工具IDE之后,然后再下载支持C#开发相关的插件.



安装好之后就可以进入IDE进行最后一步的调试了。
进入查看帮助里面找到 .NET 和 C# 文档并安装


打出你的第一步的程序 Hello,world


contrl + F5 运行,就可以看到HelloWorld出现了在控制台里面了
下面我们来认识一下C#的程序结构,其实要快速掌握一门新的编程语言就要把HelloWorld完整解析.

这三行其实是使用命名空间就像JAVA里面的import关键字一样,导入已经声明好的命名空间,在程序中就可以直接使用类名来调用

这个是声明命名空间,在其他程序中可以using这个命名空间

这个是类的声明,与JAVA中的类一样是面向对象编程的一个重要组成部分

方法的声明以及,方法体的语句.
到此环境已经配置成功就可以畅通无阻的敲代码了.
二,面向过程开发

基本上与其他的强类型开发语言一样都是有严格的类型区分,但是C#在小取值范围类型转换成大取值范围类型时是自动转换类型的不用像c语言一样声明类型转换,反之则不行还是需要显式转换,并且运算符都是与其他语言保持一致,变量的命名风格采用的是驼峰命名风格.
强制转换的几种方法

逻辑运算符号

并且与C语言不一样的是逻辑表达 不是0与非0,而是True 与 False ,这种值的类型就是bool 类型

分支结构,循环结构

二维数组

方法
方法名要求首字符大写,遵循驼峰命名法

最后引用一下某培训班对方法执行原理的讲解,大致意思就是当程序执行时会把方法压入栈中,那么按照数据结构--栈的特性,先入后出,先调用(先压进栈),只有等最上面的方法执行完之后,下面的方法才能运行知道出栈,这也解释了,为什么main方法总是最后出栈.

方法的重载,当形参不一样时,方法名一样时,这时就叫做方法的重载

当程序产生无限递归的时候,将会发生栈溢出。因为栈里面的方法超出了栈的上限。


引用类型

这一段代码执行之后的结果是没有发生交换,因为两个方法所访问的地址不一样因此不会发生交换,而下面这一段代码会有所不同。


原理如图所示,因为数组分配的是一段连续的空间在堆中,而数组变量储存的是这段连续空间的首地址,因此传给另外一个方法时,也是传的地址,因此通过这个地址可以实现交换。这就是所谓的引用类型。

当参数变量使用ref 时,可以引用传递参数地址,因此可以达到引用的效果。



当参数变量使用out 时,可以引用传递参数地址,因此可以达到引用的效果。


那么 ref 和out 有什么区别呢?
1,在方法结束前,必须对out进行赋值,ref不需要
2,out参数不能直接使用默认未赋值,而ref参数能直接使用默认有值(形参的值)。
练习两个常用的算法
二分法查找

选择排序

二,面向对象开发
C#是一个面向对象的语言,因此与众多面向对象开发的语言有共同的特点---封装,继承,多态。
C# 的对象在栈,堆 中存在形式与java一致,存在对象引用的情况

static关键字加在方法前是不需要实例化对象就可直接访问,因此这个特征与JAVA一致

封装
修饰符是封装体现最明显的一个表现。

C#中类的属性,构造方法与JAVA 一致,也可以存在getter与setter方法,在C#中的构造方法还可以并列使用,比如下图中第三个构造方法所示

C#中的属性访问器与swift的计算属性很相似

readonly 关键字的用法和特征

单例模式1

单例模式2

单例模式3

单例模式思想,始终只创建了一个对象节约内存空间.
继承
C# 的继承,与JAVA一致,但是写法不一样,写法如下,而且构造方法不能被继承,其他继承特性都与JAVA一样,所有类都是继承自object。

多态
由于C# 多态也与JAVA的多态相似,因此直接引用培训班的讲义备忘


C#中存在类型判断

重写与JAVA基本也一致,直接忽略

唯一不一样的是C#中有override,abstract,virtual 修饰的方法,而JAVA中只存在abstract修饰符


父类方法必须是override,abstract,virtual 修饰的方法才能被子类重写,而且子类必须用override修饰重写的方法。
枚举

枚举类型中,其实每个成员变量是整型与字符串型的结合体,当直接输出值时是输出与变量名相同的字符串,但是转化成int类型的时候就会看到成员的整型值。如下

并且每个成员变量的值时可以指定的,比如

main方法代码不变输出如下:

并且依次变量的值会递增的改变,因为枚举类型变量都是递增的。
总结

今日总结
其实今天过得比较悠闲,休息会儿敲会儿代码的,导致今天没有把基础部分学习完,明天继续。