C#理论精髓

更新时间:2023-03-08 05:45:48 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

深入.NET平台和C#编程

一 第一章

1 简述.NET框架体系结构的组成

答:包括CLR(公共语言进行时)和框架类库。 2 简述CLR的主要用途

答:它是所有的,NET应用程序运行时环境,是所有.NET应用程序都要使用的编程基础,它如同一个支持.NET应用程序运行和开发的虚拟机。包括CTS和CLS。

CTS-通用类型系统:用于解决不同语言的数据类型不同的问题,所有.NET语言共享这一类型系统,在他们之间实行无缝互操作。

CLS-公共语言规范:最低的语言标准,所有运行在.NET平台上的语言所必须支持的最小特征,以及该语言为其他.NET语言之间互操作所需要的完备特征。

.NET编译技术: 所有运行在.NET平台上的语言都配有自己的编译器,通过这一编译器将应用程序编译为微软中间代码MSIL,再由编译器JIT转换为机器代码,从而实现的跨语言的平台。

.NET框架的主要内容有CLR、框架类库、ADO.NET、XML\\ASP.NET、WinForms、WebService等。

二 第二章

1 如何设置字段属性

答:只读属性,只包含get访问器 只写属性,只包含set访问器 读写属性,包含set和get访问器 2 简述C#中属性和字段的区别

答:在C#中,我们可以通过属性来约束对字段的非法的输入,属性也可以被设置成只读。 在C#中我们通常不会去直接访问字段,而是通过访问器访问(get和set),这种实现方式我们称之为属性。

属性是对字段的封装,保证了数据安全性和完整性。

类定义了一组概念的模型,而对象是真实的实体。

三 第三章

1 简述类和结构的区别 答: 不同点 类 引用类型 可以被继承 可以有默认的构造方法 结构 值类型 不能被继承 有默认的无参构造方法,但不能显式定义无参的构造方法 可以添加无参的构造方法 创建对象必须使用new 类中可以给字段赋值 相同点 可以添加构造方法,但必须是带参数的 创建对象可以不使用new 结构中给字段赋值是错误的 都可以包含字段和方法 都可以实现接口

枚举是一组指定的常数,它可以用描述性的名称表示,对可能值进行约束。 枚举的定义:enum

类图是表示类的结构和类与类之间关系的图表。

四 第四章

1 简述泛型集合和传统集合的异同 答:

不同点:

泛型可以定义类型安全的数据类型,可以约束泛型内的元素类型。 List和Dictionary访问元素时无须类型转换。 相同点:

泛型集合可以作为类中的一个属性。使用泛型集合必须实例化。

五 第五章

1 简述操作读写一个文件的过程 答:

? 创建一个文件流:FileStream fs=new FileStream(string filePath); ? 创建阅读器或写入器:StreamReader sr=new StreamReader(fs);

或:StreamWriter sw=new StreamWriter(fs);

? 执行读写操作:sr.ReadLine(); 或:sw.WriteLine(); ? 关闭阅读器或写入器:sr.Close(); 或:sw.Close(); ? 关闭文件流:fs.Close();

文件流的类是FileStream。

StreamWriter是一个写入器,SreamReader是一个读取器。

File类用于对文件进行操作,如复制、删除等,Directory类用于对文件夹操作,它们都是静态类。 常用的方法:判断一个文件或目录是否存在 File.Exists(string filePath);返回bool值,常用作if语句的条件。 XML称为可扩展标记性语言,它主要用于描述数据。读取一个XML文档使用XmlDocument对象,XML节点使用XmlNode对象表示。

六 第六章

1 简述public private protected三种访问修饰符的区别 修饰符 public 类内部 可以 子类 可以 其他类 可以 private protected 可以 可以 不可以 可以 不可以 不可以

继承必须符合 is a的关系,被继承的类称为父类或者基类,继承其他类的类称为子类或者派生类。

继承机制很好地解决了代码复用的问题。

子类继承父类的成员,并且可以拥有自己特有的成员。 base关键字可以用于调用父类的属性、方法、构造方法。

继承具有传递性,如果class A:B;class B:C,则A也可以访问C的成员。 C#中类的继承具有单根性,一个类只能够同时继承一个父类。 被sealed关键字修饰的类称为密封类,密封类不能被继承。

在子类中,如果不使用base关键字来显示调用基类构造方法,则将隐式调用默认的构造方法。

如果重载的构造方法有一个没有使用base关键字来指明调用父类哪个构造函数,则父类必须提供一个默认的构造方法。

继承模拟了现实世界的关系,继承实现了代码的重用,继承使得程序结构清晰,子类和父类的层次结构清晰,最终的目的是使其子类只关注子类的相关行为和状态,无须关注父类的行为与状态。

七 第七章

1 简述抽象方法和虚方法的区别 答: 虚方法 用virtual修饰 有方法体 可以被子类override(重写),也可以不被重写 除了密封类外都可以定义 用abstract修饰 无方法体 非抽象子类中必须重写 只能在抽象类中定义 抽象方法

2 面向对象的三大特征是什么?简述每个原则的基本功能。 (1)封装:保证对象自身数据的完整性和安全性。

(2)继承:建立类之间的关系,实现代码复用,方便系统的扩展。 (3)多态:相同的方法调用可实现不同的实现方式

多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同相应的行为方式。

抽象方法是一个未实现的方法,它用abstract关键字修饰,含有抽象方法的类必然是抽象类。 使用抽象方法和虚方法都可以实现多态性。

抽象方法要在其子类中通过override关键字重写,除非它的子类也是抽象类。 里氏替换原则:

原则上子类对象是可以赋给父类对象的,也可以说子类可以替代父类。但是反过来,父类对象是不能赋给子类对象的。子类出现的地可以用父类代替。

软件中的设计模式是软件开发中对于某种需求的一种经验的总结,是特定问题经过实践检验的特定解决方法。

简单工厂模式用于在调用者不知道对象属于哪个子类的情况下,创建他们共同的父类。

八 第八章

1 简述抽象类和接口的区别。 答: 抽象类 用abstract定义 不同点 只能继承一个类 需要override实现抽象方法 不能实例化 相同点 包含未实现的方法 派生类必须实现未实现的方法

IComparable接口有一个未实现的CompareTo()方法,一个类实现这个方法就能够进行排序。 接口是一组规范,是一种标准,遵循这个规范和标准就能实现某种功能。 接口可以让使用者不必关心它内部是如何实现的,方便多人协作开发。 IComparable是IComparable接口的泛型版,它对类型的约束更严格。

IComparer通常称为比较器,它用于比较两个对象的大小,可以作为参数传递给Sort()方法进行排序。

接口作为参数传递的是一个实现了这个接口的对象。接口作为返回值就是要返回一个实现了这个接口的对象。

接口 用interface定义 可以实现多个接口 直接实现 非抽象派生类必须实现抽象方法 实现接口的类必须实现所有成员 九 第九章

序列化是将对象的状态存储到特定存储介质中的过程。 反序列化则是将存储介质中的数据重新构建为对象的过程。

标识一个类是否能够序列化要在类的头部添加一个特征[Serializable]

特性其实就是一个类,它的主要功能是对程序中的元素,如类、字段、方法、属性添加描述性的信息。

Internal修饰的成员在同一个程序集中都可以访问,但是其他的程序集中的就不能访问,应用程序中的类,如果不指定访问修饰符,默认就是internal修饰。 序列化(反序列化)的步骤: 命名空间:System.RunTime.Formatters.Binary;

1.文件流:FileStream fs=new FileStream(string filePath,FileModel.Create); ○

2.二进制流:BinryFommater bf=new BinaryFommater(); ○

3.序列化:bf.Serialize(fs,保存对象); ○ (反序列化):(保存对象)bf.DeSerialize(fs);--------要强制类型转化

4.关闭文件流:fs.Close(); ○

在.NET框架下开发三层结构数据库应用系统

一 第一章

1 用三层结构开发应用系统有哪些优势?

答:各层之间即相互依赖又互不影响。表示层只负责界面,业务逻辑层是表示层和数据访问层的桥梁,数据访问层直接操作数据库。

2 业务逻辑层的主要职责?

(1)根据业务规则对数据进行加工和处理

(2)与相邻的表示层和数据访问层进行数据交换

二 第二章

1 自定义Dataset的主要步骤 答:

? 创建Dataset对象 ? 创建DataTable对象

? 创建DataColumn对象搭建表结构 ? 将创建好的表结构添加到表中 ? 创建DataRow对象新增数据 ? 将数据插入到表中 ? 将表添加到Dataset中

用ADO.NET实现三层结构应用系统是,DataSet的主要作用是三层之间数据传递的载体。 DataView是DataTable的动态数据试图,我们使用DataView的Sort、RowFilter属性实现数据的排序、过滤。

用ADO.NET执行带参数的SQL命令时,我们需要使用参数(Parameters)集合的Add方法为SQL命令添加参数,包括参数名称、参数类型。

三 第三章

用OOP实现三层结构时,实体类是三层结构数据传递的载体。

using在C#中主要有两个用途:一种是作为指令,引用命名空间。另一种是作为语句,用于定义一个范围,在此范围末自动释放对象。

在使用实体类开发三层结构,用户的请求需要返回实体对象集合时,可使用List实现。 在三层结构中,我们使用实体类消除关系数据与类之间的差别,以更好地使用面向对象的思想来实现我们的系统。

四 第四章

在.NET平台下有两种异常。一是由于公共语言运行库引发的异常,另一种是用户应用程序引发的异常。

Exception类有4个常用属性:1 Message 提供异常常用信息。2 Source 提供导致异常发生的应用程序或对象名称。3 StackTrace 提供在堆栈上所调用方法的详细信息,并首先显示最近的调用方法。4 InnerException 对内部异常的引用,如果此异常基于前一个异常,

则内部异常指最先发生的异常。

在软件开发中使用单元测试的好处是:有助于发现软件在开发前期的缺点,是确保软件质量的具体操作方法。

五 第五章

1 简述模式、设计模式、面向对象设计模式的概念。

答:简单模式是描述了一个在我们周围不断发生的重复的事情,以及该问题的解决方案。

设计模式描述了软件开发过程中某一类常见问题的一般性解决方案。

面向对象设计模式是对在特定场景下,解决一般设计问题中类与相互通信的描述。 2 简述抽象工厂设计模式的概念使用思路。

答:提供一个一系列相关或互相依赖对象的接口,而无需指定它们具体的类。 使用思路:

? 提供一系列相互依赖对象的创建 ? 封装对象的常规创建方法

? 提供统一调用数据访问方法的方式

? 避免调用数据访问方法和具体对象创建工作的紧耦合

3 简述使用接口、抽象类、抽象方法实现抽象工厂设计模式的过程。

答:1 搭建三层结构

2 添加各层之间的依赖关系(如图)

3 实现数据访问接口

4 实现数据访问对象创建功能

5 业务逻辑层调用数据访问层方法

抽象工厂设计模式:

是GOF这23种设计模式中的一种。 属于创建型模式

提供一个创建一系列相关或互相依赖对象的接口,而无须指定它们具体的类。

本文来源:https://www.bwwdw.com/article/b62.html

Top