.NET复习要点
重点:第七章、第八章面向对象⭐⭐
一、填空题要点
顶层类Object属性和事件(第七章P163)
4个公有成员方法:
使用:
object o1 = new object();
Console.WriteLine(o1.GetType()); //输出System.Object
面向对象相关概念(第七章P137)
主要特性:封装性、继承性、多态性
-
类
类是一种提供功能的数据类型,可以用来声明、产生对象。可以把类理解成一种定义了对象行为和外观的抽象模板,把对象看作是类的具体实例;对象就是类的一个实例,而一个类可以创建多个对象。 -
对象
任何一个对象都具有属性和方法这两个要素。
一个系统的多个对象之间通过一定的渠道相互联系,因此对象要能收发消息。所谓消息,就是对象与对象之间用来沟通的信号、语言等。 -
访问修饰符
-
静态类(第七章P159)
使用static关键字声明
-
抽象类(第8章P183)
使用abstract修饰
有抽象类成员,只有声明,没有实现;可以包含非抽象的成员
抽象类不能被实例化,因为包含没有实现的成员
从抽象类继承的类必须实现所有功能,如果没有完全实现,也会变成抽象类,必须用abstract修饰。
抽象类定义方法,由派生类实现 -
委托(第8章P196)
委托能将方法本身作为参数传递
声明委托
[访问修饰符] delegate 返回值类型 委托名([参数列表]
public delegate int Caculate(int x, int y); //声明了一个Caculate的委托
委托的实例化
委托类型 委托变量名 = new 委托型构造函数( 委托要引用的方法名)
int intAdd(int x, int y){
return x + y;
}
int intSub(int x, int y){
return x - y;
}
Caculate a1 = new Caculate(intAdd);
Caculate a2 = new Caculate(intSub);
委托方法的调用
Caculate cal = new Caculate(intAdd);
int result = cal(6,8);
//另一种调用
Caculate cal = intAdd;
int result = cal(6,8);
委托使用分为3步:类型定义、对象创建和方法绑定、方法调用
一个委托对象可以封装多个方法进行多路广播
- 接口(第8章P188)
接口比抽象类型更抽象,只描述能提供什么服务,但不实现任何功能
C#可以用接口实现多继承
功能由派生类实现 - 事件(第8章P203)
完整的事件有三要素
发布者类中声明事件
public delegate void ClassEventHandler(); //声明委托
public class Subscriber //发布者类
{
private string str;
public string Str
{
get { return str; }
set { str = value; }
}
public event ClassEventHandler InputStr; //声明事件
public void InputSomething()
{
if(Console.ReadLine() == "class")
{
if (InputStr != null)
InputStr(); //触发事件
}
}
}
订阅者类中订阅事件
public class Student: Person, AttendClass, Exam
{
public Student(string name, string id):base(name, id)
{
}
public void Enter(Subscriber sub)
{
sub.InputStr += go_to_class;
}
public void go_to_class()
{
Console.WriteLine("----------------------");
Console.WriteLine(Name+":我要去听离散数学课了!");
}
public void go_to_exam()
{
Console.WriteLine("----------------------");
Console.WriteLine(Name+":我来参加离散数学的考试");
}
}
EventHandler委托
在.NET Framework中内置的EventHandler委托具有两个参数,它们的数据类型分别是Object和EventArgs类型,并且没有返回值
对控件的遍历访问(第6章P109)
foreach (Control item in this.Controls)
ADO.NET进行数据库访问的核心对象(第12章P296)
二、选择题要点
MessageBox.Show()参数(第4章P75)
MessageBox.Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon);
显示具有指定文本、标题、按钮和图标的消息框。
容器类控件(第5章P98)
- 分组框GroupBox:把RadioButton(单选框)和CheckBox(复选框)等控件放在其中
- 面板Panel:只有GroupBox有标题,Panel有滚动条
- 选项卡TabControl:可以生成多页对话框
集合类控件(第6章P117)
- 列表框ListBox
常用操作
# 在列表中插入元素
listBox1.Items.Add(0);
listBox1.Items.Add("zero");
object[] obj = new object[4]{2,"two",3,"three"};
listBox1.Items.AddRange(obj);
listBox1.Items.Insert(2, 1);
listBox1.Items.Insert(3, "one");
# 从列表中删除元素
listBox1.Items. Remove (0);
listBox1.Items. RemoveAt (0);
# 从列表中清除所有项目
listBox2. Items.Clear( );
# 获取列表中的项目数
listBox1.Items.Count
# 判断指定值是否在表中
bool b1=listBox1.Items.Contains(3);
bool b2=listBox1.Items.Contains(“three”);
# 将列表中的全部项目写到数组中指定位置
object[] obj2 = new object[10];
listBox1.Items.CopyTo(obj2, 0);
# 获取列表指定项的索引
int i=listBox1.Items.IndexOf("two");
# 获取列表指定索引处的项目
object item4 =listBox1.Items[3];
# 获取列表中指定的项
listBox1.SelectedItems
- 复选列表框CheckedListBox
常用的基本和ListBox一致
# 获取项目项目中复选框的选择状态
bool b = checkedListBox1.GetItemChecked(4);
- 组合框ComboBox(下拉框)
用SelectedIndex
表示选中了第几个
三、编程题要点
- 会设计一个类
- 类的实例化
委托类的创建、实例化,匿名方法委托
匿名方法:不写出该方法的定义,而是将代码直接写在委托创建表达式中 - 方法的实现
文件处理、异常处理等 - 事件的创建
事件的例子点击查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ex8
{
//定义事件,输入class时触发时间,学生上课
public delegate void ClassEventHandler(bool isClassBegin); //定义委托类型
public class Bell
{ //发布者类
private bool isBegin = false;
public bool IsBegin
{
get{ return isBegin; }
set{ isBegin = value; }
}
public event ClassEventHandler OnClassChange; //声明事件
public void BellChange()
{
isBegin = !isBegin;
Console.WriteLine("现在是:{0}", isBegin ? "上课" : "下课");
if (OnClassChange != null)
OnClassChange(isBegin); //触发事件
}
}
public class Teacher
{//订阅者类
public void isClass(Bell bell)
{ //订阅事件
bell.OnClassChange += isGotoClass;
}
public void isGotoClass(bool isBegin)
{ //事件处理程序
if (isBegin)
{
Console.WriteLine("Teacher: Class Beginning!");
}
else
{
Console.WriteLine("Teacher: Class Not Beginning!");
}
}
}
public class Student
{ //订阅者类
public void isClass(Bell bell)
{ //订阅事件
bell.OnClassChange += isGotoClass;
}
public void isGotoClass(bool isBegin)
{ //事件处理程序
if (isBegin)
{
Console.WriteLine("Student: Class Beginning!");
}
else
{
Console.WriteLine("Student: Class Not Beginning!");
}
}
}
class Program
{
static void Main(string[] args)
{
Bell bell = new Bell(); //实例化发布者类
Student stu = new Student(); //实例化订阅者类
Teacher teacher = new Teacher();
stu.isClass(bell); //绑定事件
teacher.isClass(bell); //绑定事件
bell.BellChange(); //触发事件
bell.BellChange(); //触发事件
bell.BellChange(); //触发事件
}
}
}
四、简答题要点
不同类的区别
- 静态类
只包含静态成员
不能被实例化
不能被继承 - 抽象类
抽象类中包含的抽象方法只有声明,没有实现
不能实例化
只能作为基类被继承 - 密封类
不能被继承,和抽象类相反
方法必须是实现的,不能是虚拟的或抽象的
对象方法实现
- 重载和重写(第8章P179
重载:方法名相同,参数表不同
重写:与多态性相关,派生类在继承时重写基类的方法,用override - 委托
多路广播:向一个委托的调用列表添加多个方法引用后,通过调用该委托一次性调用所有的方法。
用委托合并来实现多路广播
委托合并就是委托对象的相加
简单类型和对象类型
- 值类型
进一步划分为简单类型、枚举类型、结构类型
装箱:将值类型转换为引用类型
拆箱:将引用类型显示转换为值类型 - 引用类型
类、接口、委托、数组、字符串、对象型(动态数组、队列、栈、哈希表、有序列表) - 类型转换(第2章P34)
隐式转换:编译系统自动进行
显式转换:
(int)(..)
int.Parse("100")
Convert.ToInt32("100")
ADO.NET数据库访问机制(第12章P298)
- 联机访问
程序在处理数据过程中,没有与数据库端口,一直与数据库保持连接状态
- 脱机访问
没处理数据之前,与数据库连接来获取数据,数据处理过程中与数据库断开,处理完数据再与数据库连接来更新数据
注:有错误请指出!