.NET平台和C#编程基础知识复习

来源:互联网 发布:淘宝上好吃的零食推荐 编辑:程序博客网 时间:2024/05/01 23:50

深入.NET平台和C#编程复习

1.    深入.NET框架

1.     
.NET框架的核心结构:

 

*CLR是.NET框架的基础;

*FCL用于支持开发各种各样的.NET程序;

*CLS是为了规范各个语言间的最低语言标准;

*CTS是用于解决不同语言数据类型的不同的问题。

 

2.     面试:.NET应用可以跨平台吗?

可以。通过开源项目Mono,可实现在Unix和Linux下运行.NET应用程序。

 

3.     封装的好处:

●  保证数据安全

●  提供对外接口

●  类内部修改后不影响其他类

*类的私有方法也是一种封装。

 

2.    深入C#数据类型

1.     数据类型:

分为:值类型 和 引用类型。

 

值类型:

值类型都存放于单独的内存区域中。存放值类型的内存区域称为“栈”(Stack)。诸如:入栈、出栈、堆栈等。

主要包括基本数据类型枚举类型

 

引用类型:

针对于赋值操作来说,就是将原对象的引用传递到另一个引用。操作的时同一块内存区域。则当此块内存区域的值改变后,相引用关联的对象的值也会一起改变。

引用类型包括数组接口等。

 

值类型和引用类型对照表

类别

描述

值类型

基本数据类型

int 整型

long 长整型

float 浮点型

double 双精度型

char 字符型

bool 布尔型

枚举类型

enum 枚举

结构类型

struct 结构

引用类型

System.Object 基类

string 字符串

class 自定义类

接口

interface 接口

数组

int[],string[]…… 数组

*string虽然属于引用类型,但在使用中表现出值类型的特征,即string的值可以被更改。

例如:

int[] infoZhang = new int[]{170,60};

int[] infoLi = infoZhang;

则只要infoZhang或infoLi的任意一个数组改变,则两者都会发生改变,因为他们两个变量都操作同一块内存区域。若两者不互相影响,则new新对象即可。

 

2.     结构:

为何要使用?

●  struct继承于System.ValueType命名空间,属于值类型,值类型存储于内存的堆栈(Heap-Stack)中,速度快;

●  class继承于System.Object命名空间,属于引用类型,存储于堆(heap)中,速度没有在栈(Stack)中快。

 

特点:

●  可具有字段和方法

●  字段不能赋初值

●  可以不用new关键字直接定义结构的对象

●  声明了结构的对象后必须赋初值

 

使用场合:

struct适合处理较少的字段,因为Heap-Stack资源很有限,不像Heap那样具有较大的空间;否则大量数据应继续采用class来完成,而不是struct。

 

3.     装拆箱


关系:

 

*拆箱时,原来装箱的值是何种类型则拆箱时也必须是这种数据类型,否则在强转时会抛出异常。

例如:

int i = 123;

object o = i;   //装箱

int j = (int)o;   //拆箱

 

4.     值传递和引用传递

规律:

●  使用值方式传递值类型参数时,修改不保留;

●  使用值方式传递引用类型参数时,保留修改;

●  使用引用方式传递值类型参数或引用类型参数时,保留修改。

只要是对参数进行引用类型的传递或者用ref关键字修饰参数进行传递的,都会保留更改。

 

注意

看如下例子:

针对String类型的改变值的例子。


未使用ref:

 


使用了ref:


可以看得出,虽然String类型属于引用类型,原本应该修改掉String变量本身的值,可结果却没有修改掉。

推出结论:虽然String为引用类型,但实际使用中却表现出值类型的特点。(其实,从更本质的方面来说,String根本就不算一种数据类型。)

若想改变字符串的值,则变量前使用ref关键字修饰即可。

 

3.    使用集合组织相关数据

1.     ArrayList

ArrayList相当于动态数组,称为“数组列表”。既然属于数组,则必定可通过索引访问。且可动态扩充容量,且会将放入的数据装箱。

若要指定大小则在实例化后的括号内填写指定的容量大小即可。

 

数据的添加

[ArrayList对象] . Add( [数据] );

 

获取实际元素数

[ArrayList对象] . Count .ToString();

 

删除元素

●  按照索引删除:

[ArrayList对象] . RemoveAt( [索引位置]);

●  按照对象名称删除:

[ArrayList对象] . Remove( [对象名称]);

 

2.     集合初始化器

…… = newArrayList()

{

       new SE(){Name = “张三”,Gender=26,Height=183} ,

       new SE(){Name = “李四”,Gender=17,Height=175},

       …………

}

 

3.     HashTable

一种名为“哈希表”的数据结构。其通过键(Key)-值(Value)对来组织数据的,且会将放入的数据装箱。

 

添加元素

[HashTable对象] . Add( [键] , [值/实际对象/实际值] );

 

获取元素

String names = (String)[HashTable对象] [ “[键名称]” ];

 

删除元素

[HashTable对象] . Remove [ “[键名称]” ];

 

4.     ArrayList和HashTable的异同点

 

描述

ArrayList

HashTable

访问元素的方式

索引、对象名

键名称

容量自动扩充

支持

不支持

遍历方式

for、foreach

foreach

装箱

部分属性和方法

Count、Clear()、Remove()

Count、Clear()、Remove()

 

5.     泛型和泛型集合

泛型集合可对集合中的元素类型进行约束,提高数据安全性和性能。

 

泛型集合List<T>

List<T>与ArrayList相似,只不过List<T>是ArrayList的加强,它对放入集合中的数据类型进行了约束。

既然进行了约束,就不会出现各种各样的数据类型,所以List<T>在取值时无须强转,提高了性能。

 

泛型集合Dictionary<K,V>

Dictionary<K,V>是HashTable的加强,具有泛型集合的全部特性,取值时仍不需要强转。

 

泛型类

泛型类中可以容纳任意数据类型。此数据类型由程序运行时决定。

public classClassName<T>

{

       private T_VALUES;    //值类型不定

       public TvALUES          //运行时由程序决定数据类型

{

       get { return _VALUES; }

       set { _VALUES = value; }

}

}

 

4.    深入类的方法

1.     构造函数

特点:

●  方法名与类名相同

●  无返回值类型

●  作用是初始化对象

 

种类:无参构造函数和 带参构造函数 。

 

执行过程:构造函数当在new时(调用时)就已经执行过了。构造函数先于类的其他方法执行

 

系统默认情况下会为类分配一个无参构造函数(隐式构造函数,无方法体);

当手动编写了任意一个类的构造函数后,C#为类默认分配的无参构造函数就失效了,若仍想启用,则只能手动编写无参构造函数。

 

MSDN官方文档:在C#中,一旦类有了构造函数,就不再自动分配构造函数。

 

带参构造函数以传参的方式完成对象的初始化工作。

 

2.     方法重载

 

方法名相同、参数列表不同的方法称为“重载”。

*重载的方法与方法的返回值毫无关系。

 

构造函数的重载

构造函数可带有各种各样的参数,所以可以在同一个类中构成重载。

 

3.     对象的交互

对象间通过 属性方法 进行交互。

 

【第6章】

0 0
原创粉丝点击