C#零基础学习之路——委托
一. 学习背景
基于学习b站刘老师的c#入门,整理学习心得。
二. 委托
2.1 什么是委托
委托的简要理解:委托其实就是c/c++中的函数指针,只是在c#中换了一种表现形式。
2.2 简单的委托
下面我们使用c#自带的委托,Action和Func委托,老样子,打开编译器,键入代码,代码1:
using System;
namespace DelegateExample
{
class Program
{
static void Main(string[] args)
{
int x = 100;
int y = 200;
int z = 0;
Calculator calculator = new Calculator();
//使用Action委托,注意传进去的参数为函数名。
Action action = new Action(calculator.Report);
Func<int, int, int> func1 = new Func<int, int, int>(calculator.Add);
Func<int, int, int> func2 = new Func<int, int, int>(calculator.Sub);
calculator.Report();
action.Invoke(); //action();
z = func1.Invoke(x, y);
Console.WriteLine(z);
z = func2.Invoke(x, y);
Console.WriteLine(z);
Console.ReadKey();
}
class Calculator
{
public void Report()
{
Console.WriteLine("I have three methods");
}
public int Add(int a, int b)
{
int result = a + b;
return result;
}
public int Sub(int a, int b)
{
int result = a - b;
return result;
}
}
}
}
代码说明:仔细观察,委托的使用方法跟类一样,先创建实例然后调用方法,其实委托是一种类,下面开始学习自定义委托。
2.2 自定义委托
委托虽然是一种类,但是它的声明和一般类不同。它的声明格式是仿照c/c++的函数指针声明的,代码2:
using System;
namespace DelegateExample
{
public delegate int Calc(int x, int y);
class Program
{
static void Main(string[] args)
{
int result = 0;
Calculator calculator = new Calculator();
Calc calc1 = new Calc(calculator.Add);
Calc calc2 = new Calc(calculator.Sub);
result = calc1.Invoke(100, 500);
Console.WriteLine(result);
result = calc2.Invoke(100, 500);
Console.WriteLine(result);
Console.ReadKey();
}
class Calculator
{
public int Add(int a, int b)
{
int result = a + b;
return result;
}
public int Sub(int a, int b)
{
int result = a - b;
return result;
}
}
}
}
代码说明:这里自定义了一个Calc委托,委托是类,声明委托跟类同级,public表示公开,delegate表明要声明一个委托。目标方法的返回值为int,参数列表为(int x,int y)。故该委托能封装返回值类型为int,参数列表为(int,int )的函数。注意委托的声明位置。日后研究委托的应用。
三. 总结
没啥总结的,注意委托和目标函数就行。