1.文件类型IO
2.委托
定义:将方法做为方法的参数
实现步骤
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate {
1. //定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
class Program {
2.定义两个函数,参数要相同
private static void EnglishGreeting(string name) {
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name) {
Console.WriteLine("早上好, " + name);
}
3.注意此方法,它接受一个GreetingDelegate类型的方法作为参数
private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
MakeGreeting(name);
}
static void Main(string[] args) {
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
Console.ReadKey();
}
}
}
输出如下:
Morning, Jimmy Zhang
早上好, 张子阳
多播委托
1.public delegate void DelTest();
class Program
{
static void Main(string[] args)
{
3. DelTest del = Test1;
del += Test2;
del += Test3;
del += Test4;
del -= Test3;
del += Test3;
del();
Console.ReadKey();
}
2.0 static void Test1()
{
Console.WriteLine("我是Test1");
}
2.1 static void Test2()
{
Console.WriteLine("我是Test2");
}
static void Test3()
{
Console.WriteLine("我是Test3");
}
static void Test4()
{
Console.WriteLine("我是Test4");
}
}
3.窗体之间的传值
窗体1<---窗体2
(1) 通过静态字段传值
在DataClass中代码
class DataClass
{
//存储窗体2中文本框的文本 作为全局共享的资源
public static string _text;
}
在form2
// DataClass._text=textBox1.Text.trim();
在fom1 中
private void button1_Click(object sender, EventArgs e)
{
Form2 frm= new Form2();
frm2.SHow();
}
再加一个定时器
label1.Text=DataClass._text;
如果是委托
在form2
public delegate void DelTest(string str);
public partial class Form2 : Form
{
private DelTest _del;//存储Form1传送过来的函数
public Form2(DelTest del)
{
this._del = del;
InitializeComponent();
}
在form1 中
//将Form2传送过来的数据 赋值给Label
void ShowText(string str)
{
label1.Text = str;
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2(ShowText);
frm2.Show();
}
委托和事件
委托和事件的区别
//委托是不安全,所有用事件,属于多播委托
//事件是一个类型安全的委托
//事件不能在外部调用,委托只能在内部调用
class Program
{
static void Main(string[] args)
{
PlayMusic p = new PlayMusic("");
p.DelPlayOver += P_DelPlayOver;
}
private static void P_DelPlayOver(object sender, EventArgs e)
{
PlayMusic p = sender as PlayMusic;
Console.WriteLine(p.Name+"播放Ok");
}
}
class PlayMusic
{
1. public event EventHandler DelPlayOver;//注册事件
public string Name { get; set; }
public PlayMusic(string name)
{
this.Name = name;
}
2. public void PlaySong()
{
Console.WriteLine("正在播放{0}",this.Name); ;
Thread.Sleep(3000);
if (DelPlayOver!=null)
{
EventArgs e = new EventArgs();
DelPlayOver(this, e);
}
}
}
步骤1. 声明事件
2.调用事件,调用前必须注册, 要必须加+=,给其来一个函数
3. 执行
多event ,另外一个是+=
3.泛型
提高代码的复用性,避免了装箱操作,类型安全
MyList<myClass> list1= new MyList<MyList>()
泛型接口,参数,方法(可以通过多个参数来重载),泛型委托
public delegate void MyDelegate<T>(T item);