c# Action

之前一直用的是delegate,最近看同事的代码,发现都是用的Action,所以学习了下Action。

Action 与delegate的区别:

delegate需要根据签名的不同,需要定义多次委托类型 而 Action本身已经定义好了委托类型。

delegate 可以是不提供返回类型,也可以提供返回类型 而Action 是不提供返回类型。

1. .xaml文件

<Window x:Class="ActionDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ActionDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button x:Name="ActionBtn" Content="ActionDemo" HorizontalAlignment="Left" Height="81" Margin="203,175,0,0" VerticalAlignment="Top" Width="151" Click="ActionBtn_Click"/>

    </Grid>
</Window>
 

2. .cs 文件

namespace ActionDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public Action action_1; //不带参数的Action
        public Action<int> action_2;//  带一个参数的Action
        public Action<int, int> action_3; // 带两个参数的Action  
        public Action<List<int>> action_4; // 带一个列表的Action  


        public MainWindow()
        {
            InitializeComponent();
            action_1 = Action1_func;
            action_2 = Action2_func;
            action_3 = Action3_func;
            action_4 = Action4_func;
        }
        private void Action1_func()
        {
            Console.WriteLine("Action1_func");
        }
        private void Action2_func(int x)
        {
            Console.WriteLine("Action2_func : x = {0}",x);
        }
        private void Action3_func(int x,int y)
        {
            Console.WriteLine("Action3_func : {0}+{1}={2}", x,y,x+y);
        }
        private void Action4_func(List<int> list)
        {
            for(int i = 0;i<list.Count;i++)
            {
                Console.WriteLine("Action4_func : {0}:{1}", i+1,list[i]);
            }
            
        }

        private void ActionBtn_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if(action_1!=null)
                {
                    action_1();
                }
                if (action_2 != null)
                {
                    action_2(3);
                }
                if (action_3 != null)
                {
                    action_3(4,5);
                }
                if (action_4 != null)
                {
                    List<int> m_list = new List<int>();
                    m_list.Add(1);
                    m_list.Add(2);
                    m_list.Add(3);
                    action_4(m_list);
                }
            }
            catch(Exception error)
            {
                Console.WriteLine(error.Message);
            }
        }
    }
}

3. 运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值