C#期末考试理论题(解答题).doc_第1页
C#期末考试理论题(解答题).doc_第2页
C#期末考试理论题(解答题).doc_第3页
C#期末考试理论题(解答题).doc_第4页
C#期末考试理论题(解答题).doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.引用类型的变量和数值类型的变量有什么不同之处?数值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存的引用或者叫句柄。对于数值类型,每个变量有一份自己的数据复制,因而也就不能通过操作其中的一个来影响到另一个。而对于引用类型,两个变量有可能引用同一个对象,因而也就可能通过操作其中的一个变量来影响也被另一个变量引用的对象2.怎么改变数据类型?什么地方需要强制转换数据类型?C#提供了两个类型转换的形式:隐式类型转换和强制显示类型转换。数据从“小类型”到“大类型”的转换时为隐式类型转换,从“大类型”到“小类型”的转换为显式类型转换,显示类型转换需要如“(type)data”一般的括号转换操作符。也就是说,将被转换的数据类型包含在目标的数据类型取值范围之内,就可以使用隐式类型转换。反之则必须使用显式类型转换。3.跳转语句和条件分支语句有什么不同之处?条件语句又称为条件选择语句,他判定一个表达式的结果是真假,根据结果判断是执行那个语句块。条件语句分为If语句和Switch语句两种方法。 很多的时候,我们需要程序从一个语句块转到别一个语句块,因为C#提供了许多可以立即跳转程序另一行代码执行的语句,这些跳转语句包括:Goto语句、Break语句和Continue语句。4.循环语句都有什么特点,有什么共通之处?循环语句是让程序重复的执行某个程序块,直到某个特定的条件表达式结果为假才结束执行语句块。 While, do-While语句的使用,它的循环条件的改变,要靠程序员在循环体中去有意安排某些语句。而For语句却不必。 While 循环,do-While循环适用于未知循环的次数的场合,而For循环适用于已知循环次数的场合。凡是能用For循环的场合,都能用While, do-While循环实现,反之则未必。While, do-While, For循环语句,虽然格式不同,但它们有着共同的特点,都实用于循环结构的程序设计。在程序设计的过程中,都具有如下三条内容:(1) 循环体的设计。(2) 循环条件的设计。 (3) 循环入口的初始化工作。 5.枚举类型有什么样的优势,在程序中是怎么处理数据的?Enum类型(枚举类型)是一组命名常量的集合,或者说是用户定义的整数类型的集合。在声名一个枚举的时候,要指定该枚举可以包含的一组可接受的实例值。同时可以创建一系列的容易记忆的名称,让程序更容易理解。每一种枚举都有一种类型,除Char之外的所有整型都可以作为枚举类型的基本类型。 枚举访问时所用的修饰符遵守访问修饰符和类或结构的访问修饰符的规则。声明为命名空间成员的枚举可以有Public或Internal访问属性。枚举使用New关键字修饰时,则表时他隐藏一个被继承的成员。并且枚举不能派生。1.简述类和结构的异同。 结构与类有很多相似之处:结构可以实现接口,并且可以具有与类相同的成员类型。然而,结构在几个重要方面不同于类:结构为值类型而类是引用类型,结构不支持继承,尽管结构可以添加构造函数,但结构没有默认的构造函数以及析构函数,结构的值存储在堆栈上而类存储在堆上。2.简要说明public、private和protected修饰符的访问权限。 public : 公有,没有访问限制。 private : 私有,只有当前的应用程序或库才能访问。 protected : 只有从当前类和当前类的派生类中进行访问。 3.简单介绍构造函数和析构函数。构造函数是在实例化对象时自动调用的函数,它们必须与所属的类同名,且不能有返回类型,每个类都有自己的构造函数。通常使用构造函数来初始化字段的值。 析构函数类似于构造函数,但是在CLR检测到不再需要某个对象时调用。在声明析构函数时,它的名称必须与类名相同,但前面有一个符号。声明的语法格式为:类名()撤销实例的语句 和构造函数一样,析构函数被自动调用时不能被显式地调用。使用析构函数的条件是:没有任何代码要使用一个实例。析构函数以调用构造函数相反的顺序被调用,因此也有人叫它“逆构造函数”。4.说明什么是重载构造函数,举例说明如何实现构造函数的重载。重载构造函数就是一个类中有两个或两个以上的构造函数,具有相同的名称不同的参数列表,调用的时候根据参数列表的不同来正确的调用。(举例代码略)5.简要介绍Object类。所有的.NET类都派生于System.Object。如果在定义类时没有指定其基类,那么编译器就会默认该类派生于Object。其重要性在于,除了自己定义的方法和属性外,还可以访问为Object定义的许多公共或受保护的成员方法,这些方法可以用于自己定义的所有其他类中。1.简述继承和继承的类型。继承是面向对象程序设计中一个很重要的特性,它是关于一个类怎样从另一个类中共享特性和行为的术语。C#中继承类称为派生类或子类,被继承类称为基类或父类。派生类能够继承基类的所有的操作、属性、特性、事件以及这些内容的实现方法,但继承得到的成员也受访问限制,即使派生类继承得到基类成员,也可能无法访问。通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。面向对象编程中,有两种截然不同的继承类型:实现继承和接口继承。2.说明抽象类和密封类的用法。有时候基类并不与具体的事物相联系,而是只表达一种抽象的概念用以为它的派生类提供一个公共的界面,为此C#中引入了抽象类的概念。抽象类不能实例化,而抽象方法没有执行代码,必须在非抽象的派生类中重写,抽象方法也是虚拟的。如果类包含抽象方法,那么该类也必须声明是抽象的。抽象类和抽象方法都用abstract来声明,声明代码如下所示: abstract class Building /声明抽象类 private bool damaged = false; / 字段 public abstract decimal CalculateHeatingCost(); / 抽象方法 C#中使用sealed来声明密封类和密封方法。对于类来说,表示不能继承该类;对于方法来说,表示不能重写该方法。下面是定义密封类和密封方法的实现代码: sealed class SealedClass /定义密封类 public sealed void SealedMethod() /定义密封方法 3.简述多态性,并实现简单多态。多态性:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#中支持两种类型的多态性:即编译时的多态性和运行时的多态性。编译时的多态性是通过重载来实现的,而运行时的多态性通过虚成员实现。多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。4.简述接口定义,并实现简单接口派生。从某种意义上说,接口是一种特殊的抽象类,但更甚于抽象类。抽象类是抽象单元,类中可以定义抽象方法或已经实现的方法。接口中只包含常量和方法定义,这些方法是类必须实现的行为类型,但没有任何方法或变量的实现。创建接口时使用关键字interface,如下面代码所示: 修饰符 interface 接口名 /方法或属性 接口的定义类似于类定义,但它的成员都是没有实现的,这与抽象类中定义方法是相同的。接口的修饰符可以是public、protected、protected internal、internal、private或new。关键字interface后面紧跟接口名称。1.在程序中使用数组可以起到什么作用?有了数组,程序可以通过相同的变量名引用一系列的变量,并用秩或称为上标下标的整型索引来访问数组内的信息。 很多时候,使用数组可以在很大程度上缩短和简化程序代码,可以通过上标和下标值来设计一个循环,高效地处理多种情况。2.如何访问数组中的元素?(1)数组初始化之后可以使用索引器访问其中的元素。(2)可以通过Foreach来迭代出数组的所有元素。3.多维数组和锯齿数组的区别是什么?(1)定义不同:多维数组:int, multi ;数组的数组(也即锯齿数组):int _jagged; (2)实例化不同:多维:int, multi=new int 10,10; 锯齿数组:int jagged=new int2; jagged0=new int5; jagged1=new int9; (3)访问遍历方式不同: 多维: foreach(int e in _multi) Console.Write(e.ToString(); 锯齿数组: foreach(int row in _multi) foreach(int e in row) Console.Write(e.ToString(); (4)定义维度不同 :多维的每个维度固定,锯齿数组每个维度不固定,因此得名锯齿数组。 (5)性能的差异: 多维:维度长度固定,利用这个特性,编译器可以生产更加高效的初始代码, 锯齿:数组越大维数越多,初始化的代码越多,列方向遍历的效率低1. 接口在实现时的规则是什么?显式实现接口成员:为了实现接口,类可以定义显式接口成员执行体。显式接口成员执行体可以是一个方法、一个属性、一个事件或者是一个索引指示器的定义,定义与该成员对应的全权名应保持一致。 继承接口实现接口具有不变性,但这并不意味着接口不再发展。派生的接口只继承了父接口的成员方法说明,而没有继承父接口的实现,接口继承允许多继承,一个子接口可以有多个父接口。 重新实现接口:继承了接口实现的类可以对接口进行重实现。这个接口要求是在类定义的基类列表中出现过的。 映射接口:类必须为在基类表中列出的所有接口的成员提供具体的实现。在类中定位接口成员的实现称之为接口映射2. Icomparer接口和IComparable接口的区别是什么?IComparable接口与IComparer接口的区别在于IComparable接口必须由要比较的类来执行,而IComparer接口独立于要比较的类,同时这也是Compare()方法定义两个比较接口的原因。3. 说明创建自定义接口的步骤。从某种意义上说,接口是一种特殊的抽象类,但更甚于抽象类。抽象类是抽象单元,类中可以定义抽象方法或已经实现的方法。接口定义了更深的特性,接口中只包含常量和方法定义,这些方法是类必须实现的行为类型,但没有任何方法或变量的实现。创建接口时使用关键字interface,如下面代码所示: 修饰符 interface 接口名 /方法或属性 1.简述C#支持的隐式转换类型。隐式转换就是系统默认的、不需要加以声明就可以进行的转换。在隐式转换过程中,编译器无需对转换进行详细检查就能够安全地执行转换。源类型 目的类型Sbyte short、int、long、float、double、decimalByte short、ushort、int、uint、long、ulong、float、double、decimalShort int、long、float、double、decimalUshort int、uint、long、ulong、float、double、decimalInt long、float、double、decimalUint long、ulong、float、double、decimalLong/ulong float、double、decimalFloat doubleChar ushort、int、uint、long、ulong、float、double、decimal2.简述装箱和拆箱的过程。装箱和拆箱机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,我们称这种转化为绑定连接。 装箱转换:是指将一个值类型隐式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型。把一个值类型的值装箱,也就是创建一个object实例并将这个值复制给这个object。 拆箱转换:拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口的值类型。 拆箱的过程分为两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值复制给值类型的变量。3.简述对象相等比较的方式。 System.Object定义了对对象进行相等比较的三种不同的方式,再加上等于比较运算符(=),共有4种相等比较的方式。 (1)ReferenceEquals()方法 (2)虚拟的Equals()方法 (3)静态的Equals()方法 (4)比较运算符= 4.简述如何重载运算符。运算符重载是指允许用户使用用户定义的类型编写表达式的能力。它允许用户定义的类型与预定义的类型具有相同的功能。 运算符重载的声明方式与普通方法的声明方式相同,使用operator关键字,后面紧跟相关运算符的符号。声明代码如下所示: 修饰符 返回值类型 operator运算符() /重载运算符 1.简述System.String类包含哪些常用方法,并说明其作用。Compare比较字符串的内容Copy将一个字符串的内容原样不动地复制到一个新的字符串中Format 格式化包含各种值的字符串和如何格式化每个值的说明符IndexOf 定位字符串中第一次出现某个给定子字符串或字符的位置Insert 把一个字符串实例插入到另一个字符串实例的指定索引处Join 合并字符串数组,建立一个新字符串Split在出现给定字符的地方,把字符串拆分为一个子字符串数组Trim 删除首尾的空白2.简述String类和StringBuilder类的异同。String类是不可改变的,一旦创建就无法修改,同时String类也是sealed类,他不能被继承。StringBuilder表示可变字符字符串,它允许有效的对字符串的字符执行动态操作,有效的缩减字符串的大小或者更改字符串中的字符。如果字符串变大,超过已经分配的字符的大小,StringBuilder就会自动的分配一个全新的、更大的数组,并开始使用新的数组。出于性能方面的考虑,大量的串联或所涉及其他字符串操作应通过StringBuilder类来执行。String 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。String串联操作每次都分配内存,而StringBuilder 串联操作仅当StringBuilder对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则String类更适合串联操作。如果串联任意数量的字符串,则 StringBuilder对象更适合串联操作3.举例说明如何对StringBuilder类型的字符串进行追加、插入和替换操作。Append()方法:给当前字符串添加一个字符串。Insert()方法:在当前字符串中插入一个子字符串。 Replace()方法:在当前字符串中,用某个字符替换另一个字符,或者用当前字符串中的一个子字符串替换另一字符串使用Replace替换字符串: StringBuilder sb8=new StringBuilder(Hello); sb8=sb8.Replace(ll,r); 使用Insert插入字符串: StringBuilder sb6=new StringBuilder(Hello); sb6.Insert(2,eee); 使用Append追加字符串: StringBuilder sb4=new StringBuilder(Hello); sb4.Append( World!); 4.简述什么是正则表达式。正则表达式是一种可以用于文字模式匹配和替换的强有力的工具,是由一系列普通字符和特殊字符组成的,能明确描述文本字符串的文字匹配模式。 5.举例说明如何使用正则表达式。class Class1 static void Main( string args ) string text = Chang Chun Li Gong Da Xue Ruan Jian Xue Yuan; string result = ; string pattern = bXS*eb; foreach( Matchm in Regex.Matches(text, pattern) result += m.ToString(); Console.WriteLine( result ); 1.使用字典处理数据有什么优势?字典是一种非常复杂的数据结构,该数据结构允许按照某个键值来访问元素。其最大的优势是能够按照键值快速查找元素,同时也可以自由添加和删除元素,且没有在内存中移动后续元素的性能开销。2.如何将一个列表指定为只读列表?集合创建好后,就是可读写的。当然,集合也必须是可读写的,否则将不能给它填充值。但是,在填充完集合后,可以创建只读集合。ArrayList集合的方法AsReadOnly返回ReadOnlyCollection类型的对象。ReadOnlyCollection类执行的接口与List相同,但所有修改集合的方法和属性都抛出NotSupportedException异常。创建只读集合语法格式如下: ArrayList listconcent1 = ArrayList.ReadOnly(listconcent);3. 队列和栈的区别是什么?队列的处理方式是先进先出的方式,而栈创建的集合则是后进先出的处理方式。4.字典可以分为哪几种类型的字典?HashTable 、ListDictionary、HybridDictionary、NameObjectCollectionBase、NameValueCollection、Dictionary、SortedDictionary5.什么是位数组?位数组就是其元素以位标志的集合数组。因为每一元素都是一位,而不是一个对象,一般们将位数组分为两类,一个是(BitArray)集合类位数组,一个是(BitVector32)结构类位数组。6.简单叙述一下队列的使用。使用Queue声明一个队列,用Queue的Enqueue()方法给队列添加元素,使用Dequeue()方法删除队列中的元素。同时我们发现在队列集合中,元素是以先进先出的顺序进行处理的。1.描述如何抛出和捕获异常。.NET Framework提供了大量处理异常的预定义基类对象。将可能引发异常的代码段放在try块中,而将处理异常的代码放在catch块中。catch块是一系列以关键字catch开头的语句,语句后跟异常类型和要执行的操作。finally块包含代码清理资源或执行要在try块或catch块末尾执行的其他操作。无论是否产生异常,都会执行finally块,因为finally块包含了应总是执行的清理代码。finally块是可选的。如果不需要清理代码,就不需要包含此块。 抛出和捕获异常是由try/catch块来完成的,基本语法如下所示: try /有可能产生异常的代码 catch(Exception e) /对异常进行处理的代码 finally /最终将执行的代码 2.简要说明.NET中使用的内部异常类。在.NET Framework中,异常是从Exception类继承的对象。System.Exception异常类派生于System.Object,通常情况下不在代码中抛出这个System.Exception对象,因为它无法确定错误情况的本质。但用户可以使用派生于System.Exception类的异常类对象来更明确表示异常。内部异常也称为预定义异常,它是.NET中使用的内部异常类的对象。3.简述如何自定义异常处理。using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyException class Program static void Main(string args) try throw (new MyException(自定义异常); catch (Exception ex) System.Console.WriteLine(异常类型:0, ex.GetType().ToString(); System.Console.WriteLine(异常信息:0, ex.Message); System.Console.WriteLine(堆栈跟踪:0, ex.StackTrace); public class MyException : ApplicationException public MyException(string strMsg):base(strMsg) 在上述代码中创建了一个非常简单的自定义异常类MyException。虽然它没有具体实现,但它继承了ApplicationException类,从而继承了Exception类。所以它拥有Exception类中定义的属性和方法。用户自定义异常并不能像标准异常那样被自动抛出,而必须在程序中使用throw语句抛出。1.简述Panel控件和Group控件的相同点和不同点。Panel控件是一个能包含其它控件的控件,可以使用Panel控件组合控件的集合,其主要用于对控件集合进行分组。GroupBox控件表示一个Windows控件,该控件显示围绕一组具有可选标题的控件的框架,与Panel控件相比该控件可以显示标题,但是却不能显示滚动条。使用GroupBox对窗体上的控件集合进行逻辑分组。组框是可用于定义控件组的容器控件。 在为控件进行分组的时候,需要标题的使用GroupBox控件,如果不需要标题但是却需要滚动条那就使用Panel控件,当然这两者都不要求的情况下,是运用那一个控件都可以的,都能达到分组效果。2.简述ListView控件View属性的值并分别说明。Details:每个项显示在不同的行上,并带有关于列中所排列的各项的进一步信息。最左边的列包含一个小图标和标签,后面的列包含应用程序指定的子项。列显示一个标头,它可以显示列的标题。用户可以在运行时调整各列的大小。 LargeIcon:每个项都显示为一个最大化图标,在它的下面有一个标签。 List:每个项都显示为一个小图标,在它的右边带一个标签。各项排列在列中,没有列标头。 SmallIcon:每个项都显示为一个小图标,在它的右边带一个标签。 Tile:每个项都显示为一个完整大小的图标,在它的右边带项标签和子项信息。显示的子项信息由应用程序指定。此视图仅在下面的平台上受支持:Windows XP 和 Windows Server 2003 系列。在之前的操作系统上,此值被忽略,并且 ListView 控件在 LargeIcon 视图中显示。 3.简述ListBox控件和CheckedListBox控件的区别。ListBox控件表示用于显示项列表的Windows控件,该控件使得你得以向用户显示一组列表项,用户可以单击选择这些项,CheckListBox控件显示一个ListBox,其中每项的左边显示一个复选框,用户一次可以选择一项,也可以选择多项。4.简述PictureBox控件SizeMode属性的值并做相关说明。AutoSize:调整 PictureBox大小,使其等于所包含的图像大小。 CenterImage:如果 PictureBox 比图像大,则图像将居中显示。如果图像比 PictureBox 大,则图片将居于 PictureBox 中心,而外边缘将被剪裁掉。 Normal:图像置于 PictureBox 的左上角。如果图像比包含它的 PictureBox 大,则该图像将被剪裁掉。 StretchImage:是图像拉伸以适合 PictureBox 的大小。 Zoom:图像大小按其原有的大小比例被增加或减小。5.简述RichTextBox控件是如何加载文件的,或写出代码。RichTextBox控件提供具有打开和保存文件的功能的方法。LoadFile方法使你得以将现有的RTF或ASCII文本文件加载到控件中,还可以从已打开的数据流加载数据。SaveFile使你得以将文件保存到RTF或ASCII文本中。Private void Form1_load(object sender, EventArgs e)richTextBox1.LoadFile(”C:test.rtf”);richTextBox1.SaveFile(”C:text.rtf”, RichTextBoxStreamType.RichText);1.说明MDI应用程序中子窗体和标准窗体的区别。MDI应用程序中的标准窗体显示为模态窗口对话框,即没有菜单的窗体。在模态对话框显示时,无法在对话框与程序进行焦点的切换,除非关闭模态对话框,焦点才会回到应用程序中。非模态对话框显示时,我们可以在任意窗体和程序之间切换焦点。所有子窗体均显示在MDI父窗体的工作区中,用户可以改变、移动子窗体的大小,但被限制在MDI窗体中。2.说明MDI父窗体和子窗体的关系及特征。MDI应用程序的界面是由父窗口和子窗口组成,父窗口或称为MDI窗体子窗口的容器;子窗口或被成为文档窗口显示各自的文档,所有子窗口都有相同的功能。特点:(1)所有子窗体均显示在MDI父窗体的工作区中,用户可以改变、移动子窗体的大小,但被限制在MDI窗体中。(2)当最小化子窗体时,它的图标将显示于MDI窗体上而不是在任务栏中。当最小化MDI父窗体时,所有子窗体页眉最小化,只有MDI父窗体的图标出现在任务栏中。 (3)当最大化一个子窗体时,所有子窗体都被最大化,当前子窗体的标题与MDI父窗体的标题一起显示在MDI父窗体的标题栏上(4)MDI父窗体和子窗体都有各自的菜单,当子窗体加载时覆盖MDI父窗体的菜单。3.简述创建建MDI应用程序的过程,以及父窗体是如何显示子窗体的。由于父窗体是MDI应用程序的基础,因此要创建一个MDI应用程序,首先要为应用程序创建一个父窗体,用来显示子窗体。然后再创建MDI子窗体,利用代码把这些子窗体载入到父窗体中显示。创建一个Windows应用程序 设置中的窗体属性IsMdiparents为True 添加一个新项Windows窗体 public ParentForm() InitializeComponent(); ChildForm child=new ChildForm(); child.Mdiparent=this; child.Show(); 4.描述MDI窗体事件Closing的执行过程。Closing事件 它可以为窗体和子窗体触发。如果试图关闭子窗体,该事件仅仅被子窗体触发,如果试图关闭MDI应用程序父窗体,Closing将首先被每一个打开的MDI子窗体触发。如果其中任何一个Closing事件被取消,Windows将取消触发,然后继续后继的Closing事件。当Closing事件被所有的MDI应用程序子窗体触发之后,最后才会被MDI应用程序父窗体触发。1.ADO.NET与ADO相比有哪些好处?与ADO相比,ADO.NET具有:可扩展性、可维护性、可编程性、可伸缩性。3.如何向DataSet中添加数据集?DataSet customerOrders = new DataSet(CustomerOrders); DataTable ordersTable = customerOrders.Tables.Add(Orders); DataColumn pkOrderID = ordersTable.Columns.Add(OrderID, typeof(Int32); ordersTable.Columns.Add(OrderQuantity, typeof(Int32); ordersTable.Columns.Add(CompanyName, typeof(string); ordersTable.PrimaryKey = new DataColumn pkOrderID ;4.DataView类如何为DataSet排序和筛选?DataSet中填充了数据之中是以表的形式存在的,而DataTable可以利用Select方法对本表进行筛选,该方法并不更改表中记录内容和顺序,只是从内存中按条件把数据提取并排序。这是一种排序和筛选的方法,DataView类主要用于排序、筛选、搜索、编辑、导航,所以我们也可以利用DataView类视图的方法对DataSet数据集中的DataTable进行排序、筛选等操作。5.说明DataRelation的作用以及如何创建它。有许多时候应用程序需要使用相关表。尽管数据集与数据库中一样也包含表和列,但它本身并不具有数据库的相关表能力。然而,可以创建DataRelation对象,基于公共键建立父(主)表和子(详细资料)表之间的关系。DataRelation 对象可执行两种功能:(1)它可使与正使用的记录相关的记录可用。如果在父记录中,它提供子记录;如果正使用子记录,它提供父记录。 (2)它可强制约束的引用完整性,如删除父记录时删除相关的子记录。 在真正的联接中,从父表和子表获取记录并将其放入单个的平面记录集。当使用DataRelation对象时,不创建新记录集。而关系跟踪表之间的关系并使父记录和子记录保持同步。 如果数据集中的表有逻辑关系,则DataRelation对象可使另一个表中的相关记录供您使用。可以创建DataRelation对象,并将其属性设置为反映这些键。然后可以使用DataRelation对象获取相关记录。此过程是间接的,因为并未联接表,而是调用父表中数据行的GetChildRows方法,给它传递定义父/子关系的DataRelation对象。该方法返回相关子记录的数组。1.简述简单绑定和复杂绑定的区别。复杂数据绑定是把一个基于列表的用户界面控件绑定到一个数据实例列表,或者说允许将多个数据元素绑定到一个控件。以列为例,复杂数据绑定可以绑定基础记录源中的多行或多列。 简单绑定是控件绑定数据列表的一行,而复杂绑定是绑定的整个列表。2.描述创建报表的简单步骤。创建报表首先要向当前项目添加Crystal Reports,其添加方法与添加其他模块一样,单击工具栏中【项目】快捷菜单中的【添加新项】按钮,弹出【添加新项】对话框,在【添加新项】对话框中的类别中选择Reporting选项,选择【Crystal报表】项并单击【添加】按钮,把Crystal Reports添加到当前项目中。 向项目添加Crystal报表后,系统会弹出【Crystal Reports库】对话框。该对话框用于选择如何创建报表,在该对话框可以选择【使用报表向导】、【作为空白报表】和【来自于现有的报表】3中创建方式。3.使用报表向导创建报表时有3种报表类型供选择,请描述这3种报表类型。(1)标准:建立由行和列构成的标准格式的报表。通常在列的底部显示汇总信息,这种报表可以根据特定的规则将信息分组。(2)交叉表:建立交叉报表,这种报表使标准报表中的行列顺序发生变化转换,常用于浏览一组复杂的数据。交叉报表中的列表是特定数据集中的记录。(3)邮件标签:创建多重列的报表,通常用于建立一个地址簿。4.简述报表文件提供的3个控件的使用方法。Text对象:用来显示静态文本。Line对象:用于绘制普通直线。Box对象:用于绘制一个封闭线框,可以是正方形也可以是圆形等。5.描述窗体是如何显示报表文件的。(1)创建一个Windows应用程序,在【工具箱】选项卡中把CrystalReportViewer控件添加到窗体设计器中。(2)在此再添加一个CrystalReportDocument控件,并和创建好的报表文件连接在一起,然后添加CrystalReportViewer控件到属性ReportSource中。(3)此时,CrystalReportViewer控件就连接到了创建好的报表文件,当窗体运行时,报表文件就会显示出来。1.LINQ表达式有哪些特点,并详细说明。LINQ查询是通过定义查询表达式来查询数据的,查询表达式是用查询语法表示的查询,可以用在C#表达式有效的任何上下文中。查询表达式由一组用类似于SQL或XQuery的声明性语法编写的子句组成。每个子句又包含一个或多个C#表达式,而这些表达式本身又可能是查询表达式或包含查询表达式。 查询表达式必须以from子句开头,并且必须以select或group子句结尾。在第一个from子句和最后一个select或group子句之间,查询表达式可以包含一个或多个下列可选子句:where、orderby、join、let甚至附加的from子句。还可以使用into关键字使join或group子句的结果能够充当同一查询表达式中附加查询子句的源。2.列举LINQ查询的典型特点。所有的LINQ查询都有三个不同的操作步骤组成,它们分别是:获取数据源、创建查询和执行查询。查询结构跟Transact-SQL类似,首先获取数据源,然后筛选,得到查询数据。3.Wf有哪些Workflow模型,并详细说明。WF的Workflow的流程模型分为两种,它们分别是:Sequential(顺序)模型和Sta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论