C#学习笔记(六)抽象类 访问限制关键字 委托 事件
第二十九讲 抽象类
抽象类:专门用于继承的类
1.声明一个抽象类使用abstract关键字
2.一个抽象类中可以包含几个抽象方法。也使用abstract
3.抽象类中可以存在非抽象的方法
4.抽象类不能被直接被实例化
覆盖父类中的抽象方法 override
代码部分
private void Form1_Load(object sender,
EventArgs e) {
//抽象类不能实类化
//Person theStudent = new Person();
Person theStudent = new Student();
theStudent.SayHello();
theStudent.about();
//*/
}
}
public abstract class Person
{
public abstract void SayHello();
public void about( ){MessageBox.Show("我是一
个人!!");}
}
public class Student:Person
{
public override void SayHello() {
MessageBox.Show("Hello!!");
}
}
第三十讲 访问限制关键字
类成员的访问关键字
public: 访问不受限制
private:只有所在类可以使用
protected:仅限于类或派生类使用、
internal:仅限于当前程序集
protected internal:仅限于当前程序及或从派生类
一般用.dll格式的出现
第三十一讲 所有类的父类 object
object也有成员方法,最具代表性的是ToString()
包括基本数据类型:int string,bool等
Person thePerson = new Person();
this.textBox1.Text =
thePerson.ToString();//将类的名字打印出来
public class Person {
string name = "wo ";
/*public override string ToString() {
return name;
}
//*/
}
第三十二讲 委托
关于委托的几种说法:
1.委托是一种类型。但是委托定义了方法的类型。
2.这样,把方法作为参数进行传递成为可能
delegate void GreetingDelegate(string name);
void EnglishGreeting(string name);
void ChineseGreeting(string name);
委托链:
委托不同于string的一个特性:可以将多个方法捆绑到同一个委托对
象上,形成委托链,当调用这个委托对象的时候,将一次调用委托链
中的方法。有批处理的效果
代码部分:(需要好好看)
namespace _234 {
public delegate void GreetingDelegate(string name);
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void GreetPeople(string name,
GreetingDelegate MakeGreeting) {
MakeGreeting(name);
}
private void EnglishGreeting(string name) {
MessageBox.Show("Morning" + name);
}
private void ChineseGreeting(string name) {
MessageBox.Show("早上好" + name);
}
private void Form1_Load(object sender,
EventArgs e) {
/*
GreetPeople("ouxiang",
EnglishGreeting);
GreetPeople("偶像",
ChineseGreeting);
//*/
//GreetingDelegate delegate1 = new
GreetingDelegate( );
GreetingDelegate delegate1 = new
GreetingDelegate(EnglishGreeting);
delegate1 = ChineseGreeting;
delegate1 += EnglishGreeting;
delegate1 += ChineseGreeting;
delegate1("zhang节");
}
}
}
第三十三节 事件
1.委托是一种自定义的类型。委托定义了方法的类型。
2.事件是委托的实例,使用委托实例的委托链注册一些方法。使用+=
注册,-=撤销
3.当时间发生的时候,调用委托链中的这些方法。不妨称这些方法为
事件处理函数。
using Delegate;
namespace _234 {
public delegate void GreetingDelegate(string name);
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
Heater heater = new Heater();
Alarm alarm = new Alarm();
Display display = new Display();
heater.BoilEvent += alarm.MakeAlert; //注册方法
heater.BoilEvent += alarm.MakeAlert; //注册方法
heater.BoilEvent += display.ShowMsg; //注册方法
heater.BoilWater(); //烧水,温度达到99时触发事件
}
}
}
namespace Delegate {
//热水器类
public class Heater {
private int temperature = 0; //声明成员变量
public delegate void BoilHandler(int param); //声明委托
public event BoilHandler BoilEvent; //声明事件
//烧水方法
public void BoilWater() {
for(int i=1; i<=100; i++){
temperature++;
if (temperature >= 99 && BoilEvent != null) {
BoilEvent(temperature); //调用所有注册的方法
}
}
}
}
//警报器类
public class Alarm {
public void MakeAlert(int param) {
MessageBox.Show("响铃:滴滴滴,谁开了,度数为:" + param.ToString());
}
}
//显示器类
public class Display {
public void ShowMsg(int param) {
MessageBox.Show("显示当前温度为:" + param.ToString());
}
}
}