【01_C#入门到精通】新手强烈推荐:C#开发课程,一整套课程

.Net:1. .Net平台
2. .Net FrameWork框架(CLR:公共语言运行池;.Net类库)


C/S和B/S模式
启动方式:cmd——devenv

快速运行程序快捷键:Fn+F5
console.writeline();在控制台输出括号中的内容(以行为单位输出)。
console.write().直接输出,直到一行输完才开始下一行
console.readkey();等待键盘输入,退出程序。

C#中特有的数据类型(关键字)是小写,大写也可。例:string/String。
命名规则:1.变量名采用驼峰命名法;
2.类或方法每个单词首字母大写。
占位符:格式:{数字};
使用方法:一对一;
保留小数位数:{0:00}——两位小数
console.ReadLIne();接收用户输入内容。
转义符:一个“\”加上一个特殊的字符,组成了一个具有特殊意义的字符

@符号:1.取消\在字符中的转义作用
2.将字符串按照原格式输出

小的转大的:隐式类型转换(自动类型转换)
大的转小的:显示类型转换(强制类型转换)
转化前提:两者类型兼容。
不兼容的数据类型转换:convert.
基本语法:int a=convert.toint32(b);

方法四:int.parse():是以上三个方法的实质 (double.parse/decimal.parse。。。)
int.Tryparse():转化失败会...

if分支结构
异常捕获:try-catch 语法:try{可能会出现异常的代码}catch{出现异常后执行的代码}

如果出现异常,执行catch中的内容,此时是b为false的时候执行,那么下面if中b为true的时候才会执行乘法操作;如果没有异常,执行try中内容,此时b为true,if语句内容也会执行。
switch-case:用于处理多条件定值的判断
语法:switch(变量或表达式的值)
{
case 值1:要执行的代码;
break;
case 值2:要执行的代码;
break;
...
default:要执行的代码;
break;
}

break:1.跳出swich-case结构
2.跳出当前循环
3.一般不单独使用,与if判断一起使用
While循环:语法结构while(循环条件){循环体;}
程序调试:

for循环:语法格式:
for(表达式1;表达式2;表达式3){循环体}
continue(s):立即结束本次循环,判断循环条件,如果成立,则进入下一次循环,否者退出循环。
三元表达式:语法:
表达式1?表达式2:表达式3:

产生随机数:Random r=new Random();
int number=r.Next(1,11);
常量:const 变量类型 变量名=值;
枚举: public enum 枚举名
{
值1;
值2;
值3;
.......
}
作用:规范开发,使代码标准统一化。

枚举类型与其他类型的转换:

结构:声明多个不同类型的变量
public struct 结构名
{
成员;//字段
}
代码规范:字段前加 _
数组:一次性储存多个相同类型的变量(没有赋值的话,数组中存的是0)
语法:数组类型【】 数组名=new 数组类型【数组长度】

冒泡排序
方法:public static 返回值类型 方法名 (参数列表)
{
方法体;
}
方法的调用:类名.方法名(参数);

静态字段模拟全局变量:
public static 类型 字段名

while(true):一直循环

out参数:

ref参数:好处:不用写返回值

params可变参数:

方法的重载:方法的名称相同,但是参数不同。

方法的递归:方法自己调用自己。
面向对象(封装,继承,多态)
我们在代码中描述一个对象,通常描述这个对象的属性和方法。

对象是根据类创建出来的。(类是对象的描述,对象是类的实例)
类:(不占内存,对象占内存)
public class 类名
{
字段;
属性;
方法;
}
方法加上static:如果方法和Main()函数不在同一个类中,需要类名.方法名才能调用;
方法不加static:可以对象.方法名调用
this:代表当前类的对象
属性:保护字段,对字段的赋值和取值进行限定。
属性的本质就是get()和set()方法.
先执行set(),再执行get().
静态与非静态的区别:

静态类使用时是通过类名.出来的,所有不能创建对象;非静态类需要创建对象,使用时通过对象.出来。
何时使用静态类
(1)如果你想要你的类当作一个工具去使用,这时可以考虑将类写成静态类。(经常需要用到的类)
(2)静态类在整个项目中资源共享。

构造函数:名字与类名一样
作用:初始化对象(给对象的每个属性依次赋值)。
类本身有一个默认的无参的构造函数。

关键字New:

)4、隐藏从父类那里继承过来的同名成员。
关键字this:
在一个构造函数中,要重复另一个构造函数中的参数,可以通过在这个构造函数的结尾用:this(需要的参数)

析构函数:帮助程序释放资源,或者不用析构函数,程序会调用垃圾回收器释放资源。
命名空间:

在一个项目中引用另一个项目——使用”依赖项”添加引用
值类型:int,double,bool,decimal,struct,enum
值类型的值存储在内存的栈中
引用类型:string,自定义类,数组
引用类型的值存储在内存的堆中

字符串的不可变性:
再给一个已经赋值的字符串重新赋值时,老值并不会被覆盖,而是重新开辟一个存储空间来存储新值(此时栈中的地址会指向新值的地址)

当程序结束后,GC(垃圾回收器)扫描整个内存,如果发现有新的空间没有被指向,则立即把它销毁。

字符串类型详解:


继承:在一些类中,将重复的成员单独封装到一个类中,作为这些类的父类
语法 子类:父类

子类继承父类的属性和方法,但子类并没有继承父类的私有字段;子类并没有继承父类的构造函数,但子类会默认调用父类无参数的构造函数,创建父类对象,让子类可以使用父类的成员。
所以,如果在父类中重写一个有参数的构造函数后,那个无参数的就被干掉了,子类就调用不到,所以子类会报错。
解决方法:
(1)在父类中重新写一个无参数的构造函数
(2)在子类中显示的调用父类的构造函数,使用关键字:base(需要传给父类的东西).

里氏转换:
(1)子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替。
(2)如果父类装的是子类对象,那么可以将这个父类强转为子类对象。、
is:表示类型转换,转换成功返回一个true,否则false。
as:表示类型转换,转换成功则返回对应的对象,否则返回一个null


protected:受保护的
可以在当前类的内部以及该类的子类中访问。
ArrayList:集合
长度可以任意改变,类型随便。
ArrayList list=new ArrayList();

ArrayList长度问题:
每次集合中实际包含的元素个数(count)超过了可以包含的元素个数(capcity)时,集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。
Hashtable:键值对集合(根据键去找值)。
键值对集合中,键必须是唯一的,值是可以重复的。
Hashtable tb=new Hashtable();
键值对对象【键】=值;

var:根据值能够推断出类型(声明的同时必须赋初值)

List泛型集合:
List<int> list=new List<int>();
装箱、拆箱:
装箱:将值类型转换为引用类型。
拆箱:将引用类型转换为值类型。

Dictionary:字典集合
Dictionary<int,string> dic=new Dictionary<int,string>();

FileStream:文件流(操作字节)

StreamReader、StreamWriter操作字符
文件的读取方式:(FileAccess)—针对文件中数据的操作
包括三个枚举:
FileAccess.Read(对文件读访问)
FileAccess.Write(对文件进行写操作)
FileAccess.ReadWrite(对文件读或写操作)
文件打开模式:(FileMode)

文件流中字符,字节,字符串之间转换:
利用语句:Encoding.(转化的字符格式).(Get数据类型)


多态:让一个对象能够表现出多种状态(类型)
实现多态的方法:
1.虚方法:将父类的方法标记为虚方法,使用关键字virtual。(这个函数可以被子类重新写一遍,子类添加关键字override)
2.抽象类(不允许创建对象):当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。(父类和方法都加关键字abstract,然后让继承他的类也就是子类进行重写)

3.接口(实现多继承时就用接口)
public interfce I...able(接口名)
(1)接口中的成员不允许添加访问修饰符,默认就是public。
(2)不允许写具有方法体的函数
(3)接口中只能有方法(属性的本质也是方法)
(4)接口中的成员的不能有任何实现。
(5)接口与接口之间可以多继承
显示实现接口:(解决方法重名问题)

自动属性:

访问修饰符:

值类型在复制的时候,传递的是这个值的本身
引用类型在复制的时候,传递的是这个对象的引用
序列化:将对象转化为二进制。
反序列化:将二进制转化为对象。
作用:传输数据

部分类:解决两个类同名问题

密封类:不能被继承
