深入.NET平台和C#编程
.NTE框架结构
.NET框架运行在操作系统之上,是.NET最基础是框架。它提供了创建,部署和运行.NET应用的环境,主要包含公共语言运行时(CLR)和框架类库(.NET Framework类库,FCL),并且支持多种开发语言。
.NET框架两个主要组件:
1.CLR:公共语言运行时:
它是所有.NET应用程序运行时环境,是所有.NET应用程序都要使用的编程基础。
基本规范:
1、CTS:规范类型(type)
C#:int:int32
java:int/Integer:int32
Convert.ToInt32()
2、CLS:规范语法(language)
在C#和java表示代码块:{}
python代码块:通过缩进
C#Main/Java-main语法
3、MSIL:中间语言
java/C#数组:
2、FCL:框架类库:
表示一部分已经被封装好的功能的集合
用法:引用命名空间
.NET框架的核心类库
1.System:此命名空间包含所有其它的命名空间
2.System.Collectins.Generic:支持泛型操作
3.System.IO:支持对文件的操作,如复制,粘贴,删除以及对文件的读写等。
4.System.Net:支持对网络协议的编程。
5.System.Data:提供对表示ADD.NET结构的类访问。
6.System.Windows.Forms:用于开发Windows应用程序
7.System.Drawing:支持GDL+基本图形操作
面向对象的回顾
定义: 类是对象的抽象,对象是类的具体
类的三大特性:
1.类的特性:封装:将一些特性私有化,将底层(实现过程)藏起来(实现方案:将内容用方法包装)
2.继承:子承父业
3.多态:一个事物的多种形态
定义类:
public class 类名
{
字段私有
属性:get[只读]、set[只写]
方法
}
类成员:字段,属性,方法
类怎么使用:
通过对象
类名 对象名 = new 类名();
对象:
对象名.属性[调用get方法]、对象名.属性=[调用set方法]
对象名.方法();
深入C#数据类型
数据类型
基础数据类型表格
常用数据类型 | Java | C# | 举例 |
---|---|---|---|
整型 | int | int | 年龄 |
浮点型 | float | float | 成绩 |
双精度型 | double | double | 圆周率 |
字符型 | string | string | 家庭住址 |
布尔型 | boolea | bool | 是否为少数民族 |
枚举类型 | enum | enum | 颜色 |
基本数据类型
1.包括的数据类型
数值:int,long,double,float
字符:char
布尔:bool
枚举:enum
结构:struct
2、命名空间:System.ValueType
3、保存方式:值保存在栈里面
引用数据类型
1.包括的数据类型
class(string)
数组
集合
委托
接口
2.命名空间:syste.Object;
3.值保存在堆里面
定义
类似类,但struct是基本数据类型,而类是引用数据类型
.1使用关键字struct
.2字段不能赋初始值
.3不能手写无参构造函数
.4结构里有多少个字段,定义构造函数就要有多少个参数
struct的使用
.1可以new出来,也可以不new出来
[注意:如果不new直接赋初始值会语法报错]
.2结构在使用的时候要给所有字段赋初始值,不然会语法报
注意使用的事项
1、结构只保存栈
2、如果字段太多,频繁相互指向,不建议
如果没有字段,自己使用自己的值—》性能比较优化
堆:空间大速度慢
栈:空间小速度快
参数传递
值传递
1.基本数据类型:形参所做改变不会影响实参
2.引用数据类型:形参所做改变会影响实参[同一个堆里面],string除外
同一个堆也就是 对象不能直接 用=值
引用传递
1.形参所做修改会影响实参
2.形参和实参都要在前面加ref
3.、加了ref,表示,当前变量,指针,指向前一个变量的地
结构
结构定义
访问修饰符 struct 结构名
{
//结构体
}
结构的定义有以下特点
1.结构中可以有字段,也可以有方法。
2.定义时,结构中的字段不能被赋初始值。
3.使用关键字Struct字段不能赋初始值,不能手写无参构造函数。
结构的使用
结构的构成和类相似。在使用结构时,要注意一下几个方面:
1.可以不用New,直接定义结构的对象即可。
2.声明结构的对象后,必须给结构的成员赋初值。
3.结构里面有多少个字段,构造函数里面就要有多少个参数。
装拆箱
装箱:基本数据---》引用--->自动转换
int i = 0;
Object obj = i;
拆箱:引用---》基本
Object obj = 100;
int i=Convert.ToInt32(obj);
使用集合组织相关信息
基本定义:
1、集合:保存一组大小不固定的值
2、类似数组:
3、泛型跟非泛型:
1.泛型:限定了数据类型
2.非泛型:没有限定数类型
ArrayList
ArrayList:没有限定数据类型—>涉及到频繁的拆箱装箱,类型转换
1、创建对象
ArrayList list = new ArrayList();
2、属性:
Count:得到长度
3、方法:
1.Add(Object value):添加
2.RemoveAt(int index):移除的是下标
3.Remove(Object value):移除的是值
4.Clear():清空所有的
5.[int index]:1、获取值;2、赋值(注意:下标一定是已经存在的)
4、遍历
for
for(int i = 0; i < list.Count;i ++)
{
Object obj = list[i];
Console.WriteLine(obj );
}
foreach
foreach(Object value in list)
{
Console.WriteLine(value );
}
List
List:限定了数据类型
1、创建对象
List list = new List();
T:任意数据类型
List可以实现ArrayList的效果–》List也可以保存任意值
List
List list = new List(); //不放T数据类型,error,编译报错
2、属性:
Count:得到长度
3、方法:
1.Add(Object value):添加
2.RemoveAt(int index):移除的是下标
3.Remove(Object value):移除的是值
4.Clear()—>清空所有的
5.[int index]–>1、获取值;2、赋值(注意:下标一定是已经存在的)
4、遍历:
for:
for(int i = 0; i < list.Count; i++)
{
list[i]
}
foreach
foreach(T value in list)
{
value
}
Hashtable
1、创建对象
Hashtable ht = new Hashtable();
2、属性
Count:得到长度
Keys:得到当前Hashtable里面所有的键
Values:得到当前hashtabale里面所有的值
3、方法
Add(Object key, Object value)
Remove(Object key)–>根据key移除
Clear()清空
5、遍历:
1、遍历所有key
foreach(Object key in ht.Keys)
{
key + ht[key]
}
2、遍历所有的value
foreach(Object value in ht.Values)
{
value
}
4、key是唯一
Dictionary
1、创建对象
Dictionary<Tkey, Tvalue> dic = new Dictionary<TKey, Tvalue>();
2、属性
Count:得到长度
Keys:得到当前Hashtable里面所有的键
Values:得到当前hashtabale里面所有的值
3、方法
Add(Object key, Object value)
Remove(Object key)–>根据key移除
Clear()清空
ContainsKey(TKey key);:判断key是否已经存在,存在返回true
5、遍历:
1、遍历所有key
foreach(T key in ht.Keys)
{
key + ht[key]
}
2、遍历所有的value
foreach(T value in ht.Values)
{
value
}
4、key是唯一
3、null不能作为key,编译的报错,运行的时候
自定义泛型:
作用:
保证类里面的变量数据类型更加灵活
语法:
public class 类名
{
}
深入类的方法
重载
特点与运用
1、在同一个类中
2、相同的方法名
3、不同的参数,或者个数不相同
4、对应的参数下标的—》参数类型不同
同类中方法后面的参数个数不同
同类中方法后面的参数个数相同,数据类型不同
类的成员
1、.同类中不能有相同名字的字段
2、一般不能有相同的方法名,在重载状态下允许相同方法名
存在意义
为了解决方法名太多的问题
void Add(int i, int j){}
void Add(int i, int j,int k){}
调用规则与注意事项
根据参数[个数+类型]调用
(不能)以(返回值类型)来决定是否是重载
(不能)以(访问修饰符)来决定是否是重载
构造函数
类的构造函数是类中的一种特殊方法,它具有以下特点:
1.方法名和类名相同
2.没有返回值类型
3.主要完成对象的初始化工作,还有一个兼职给成员变量赋值
语法和作用
访问修饰符 类名(){}
注意:
1、类似方法,只是少了一个返回值
2、方法名有要求:跟类名一致
3、构造函数也是会被重载
用来new对象,兼职:给成员变量赋值(作用)
分类
显示方式:
隐式:隐藏的无参
1、就是创建一个类,没有手写构造函数的时候当前类自带的构造函数
2、就是无参的构造函数
显示:自定义构造
就是自定义构造函数
参数的格式:
有参
无参
无参构造函数
在默认的情况下,系统将会给类分配一个无参构造函数,并且没有方法体。我们也可以自定义一个午餐鼓噪函数,在无参构造函数的方法体中对类的属性进行赋值。无参构造函数的语法如下:
访问修饰符 类名()
{
//方法体
}
带参构造函数
访问修饰符 类名(参数列表)
{
//方法体
}
隐式构造函数
当不给类编写构造函数时,系统将自动给类分配一个无参构造函数,称为隐式构造函数。C#有一个规定,一旦类有了构造函数,将不再自动分配构造函数。所以写了带参构造函数后必须要自己写一个无参构造函数否则不能调用无参构造函数。