04-我对委托的初步认识

1、最基本的委托,就是一个可以存储方法的类型

案例:把一个方法赋值给一个委托类型的变量

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace _01_委托基本
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             //MyDelegate myDelegate = M1;//2.委托实例化
13             MyDelegate myDelegate = new MyDelegate(M1);//与上面的语句效果相同
14             myDelegate();//2.委托调用
15             Console.ReadKey();
16         }
17 
18         static void M1()
19         {
20             Console.WriteLine("当前时间是:{0}",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
21         }
22     }
23 
24     delegate void MyDelegate();//声明一个无参数无返回值类型的委托
25 }

2、当一个方法想要作为参数传递时,使用委托:

示例代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace ClsLibTest
 7 {
 8     public class Class1
 9     {
10         public delegate void MyDelegate();
11 
12         public void GetTime(MyDelegate WriteTime)
13         {
14             Console.WriteLine("======================");
16             WriteTime();
18             Console.WriteLine("======================");
19         }
20     }
21 }

主程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ClsLibTest;

namespace _02_委托
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            c1.GetTime(M1);
            Console.ReadKey();
        }

        static void M1()
        {
            Console.WriteLine("你好,系统当前时间是:{0}",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        }
    }
}

 3、用委托实现窗体之间的回传值问题:

示例:

窗体1代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 委托窗体之间回传值1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Update = UpdateText;//把UpdateText方法存放到委托变量中,
            f2.Show();
        }

        private void UpdateText(string text)
        {
            this.textBox1.Text = text;
        }
    }
}


窗体2代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 委托窗体之间回传值1
{
    public delegate void Mydegate(string msg);

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public Mydegate Update;//定义一个委托变量,用于存储方法

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            string input = this.textBox1.Text;//获得用户输入的文本

            if (Update != null)
            {
                Update(input);//调用委托方法
            }

        }
    } 
}

 

 

转载于:https://www.cnblogs.com/zy-style/p/3279606.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值