使用委托中介租房理解委托与事件

委托和事件,.Net Framework中的应用非常广泛,然而,较好的理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像一道门槛儿,跨过去的,觉得太容易了,而没有过去的人每次见到委托事件就觉得心慌慌,浑身不自在。

我个人还是比较喜欢用面向对象的编程思想去理解逻辑程序,理解编程。下面就用委托中介公司租房子的示例理解使用委托流程:

1.定义委托和委托对象——租房人想要租房,但是没有房源,于是委托中介找房子;
2.编写要委托的方法——租房中介有房源,可以找到房子;
3.将要委托的方法传递给委托对象——租房人来到租房中介公司,把租房委托传达给中介公司;
4.使用委托调用委托方法——中介公司开始找房子;

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

namespace 使用委托模拟租房
{
    class Program
    {
        static void Main(string[] args)
        {
            Customer customer = new Customer("王天", RoomType.OneBedRoom, 1000);
            Agency agency = new Agency("美家");
            Room room1 = new Room(RoomType.OneBedRoom,1000);
            Room room2 = new Room(RoomType.TwoBedRoom, 3000);
            agency.roomList.Add(room1);
            agency.roomList.Add(room2);
            customer.findRoom = agency.FindRoom;
            customer.FindRoom();
        }
    }
    /// <summary>
    /// 房间类型枚举
    /// </summary>
    public enum RoomType
    {
        OneBedRoom, TwoBedRoom, ThreeBenRoom
    }
    /// <summary>
    /// 房间类
    /// </summary>
    class Room
    {
        public Room(RoomType type,int price)
        {
            this.RoomType = type;
            this.Price = price;
        }
        public RoomType RoomType { get; set; }
        public int Price { get; set; }
    }
    /// <summary>
    /// 客户类
    /// </summary>
    class Customer
    {
        public Customer(string name, RoomType type, int price)
        {
            this.CusName = name;
            this.wantPrice = price;
        }
        public string CusName { get; set; }
        public RoomType wantRoomType { get; set; }
        public int wantPrice { get; set; }

        public delegate void LetAgencyToFindRoom(RoomType roomType, int roomPrice);
        public LetAgencyToFindRoom findRoom;
        //让中介找房子的方法
        public void FindRoom()
        {
            Console.WriteLine(CusName + "说:我要找一套" + wantRoomType + "的房子,价格不高于" + wantPrice);
            findRoom(wantRoomType, wantPrice);
        }
    }
    /// <summary>
    /// 中介类
    /// </summary>
    class Agency
    {
        public Agency(string name){

        }
        public string AgencyName { get; set; }
        public List<Room> roomList = new List<Room>();
        public void FindRoom(RoomType type, int roomPrice)
        {
            Console.WriteLine(AgencyName + "中介开始找房子");
            Room room = null;
            foreach (Room r in roomList)
            {
                if (r.RoomType == type && r.Price <= roomPrice)
                {
                    room = r;
                }
            }
            if (room != null)
            {
                Console.WriteLine("找到一套:类型:" + room.RoomType + "价格:" + roomPrice);
            }
            else
            {
                Console.WriteLine("没有找到适合您的房子!");
            }
            Console.ReadLine();
        }
    }
}
时间: 2024-08-07 21:20:42

使用委托中介租房理解委托与事件的相关文章

通过一个WPF实例进一步理解委托和事件

在前写过"浅谈C#中的委托"和"浅谈C#中的事件"两篇博客,内容有些抽象,似乎难以说明委托和事件的关系. 今天通过一个小程序来进一步说明二者的使用及联系. 首先新建一个WPF应用程序,取名TestDelegateAndEvent. 在.xmal中加入四个按钮,并添加Window_Loaded事件. 代码如下: <Window x:Class="TestDelegateAndEvent.MainWindow" xmlns="http

C#学习之初步理解委托、事件、匿名方法和Lambda

最经在学习LinqtoSql,然后扯到Lambda表达式,然后扯到匿名方法,然后扯到委托,最后扯到事件处理...后来发现对委托这个概念和事件处理这个过程理解得不是很清晰,遂得一下学习笔记.那里说得不对,请大家多多指教! 第一部分:理解委托 委托委托,顾名思义,就是类似于中间人的意思,有些事情你不做,委托别人去做,比如你想相亲,但你不想去主动约女孩子,那你可以交给媒婆去帮你约. 如果你学过C++,请把委托理解成函数指针,都是为了调用函数.函数指针可以调用符合该函数指针要求的函数.什么叫符合该函数指

理解委托类型

怕大家看了觉得乱七八糟不知道讲什么,先一句话描述下:如标题,在C#中委托是一种类型,如class一样也需要声明,定义,赋值,并与class在同一个层面 再介绍之前先看下相关内容的定义(我不是咬文嚼字,个人以为,有些东西的定义一定要没明白,不能含糊,不然只会是似懂非懂) delegate :(关键字->类型->引用类型[class,interface等等这些都是引用类型关键字]) delegate 是一种可用于封装命名或匿名方法的引用类型.(并不是所有的引用类型都是class) 是一种定义方法签

总结:C# 委托的全面理解

在说事件之前得先了解委托. 委托,外表看来和C/C++中函数指针没什么区别,但是本质上你才发现他其实就是个类!也就是说理解委托得从 这个两个方面去理解(单从一个方面去理解感觉就怪怪的呵呵!) 理解委托: 什么是委托?委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针. 声明一个委托,相当于声明了一个是函数指针类型,委托是一种类型,进一步说,他就是一个类! 他的目的就是,将方法可以作为其他方法的参数传递!进一步说,就是一个方法内部需要调用另一种方法 (及方法内部还有一个方法),且

事件和委托(Event vs. Delegate)-事件阉割版的Delegate

引言 关于事件和委托的文章看过很多,但总是记不完整.尤其是在给别人讲解的时候总是很零碎,所以在此整理一下,也供大家参考,很请大家不吝赐教. 本文从一个子类如何触发基类的事件(Event),引出事件和委托的共性和区别.再简单分析下背后原因,深层原因也给大家提供了部分参考资料.欢迎大家留言讨论.   问题 "如果我想在子类里触发父类的事件(Event)应该如何实现?"(可以先自己做下或者想下,再继续看您的做法是否也曾有我碰到技术误区)   问题分解为两步: 父类定义了一个事件(Event)

理解委托(delegate)及为什么要使用委托

理解委托(delegate)及为什么要使用委托 委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来比较难,举个生活中的例子: 某人有三子,让他们各自带一样东西出门,并带回一头猎物.上面一句话可以理解为父亲对儿子的委托:猎物 办法(工具 某工具)-->delegate 猎物(返回值) 带回猎物(委托名)(工具(参数类型) x)-->delegate int GetValue(int i)三个人执

[转] 把委托说透(2):深入理解委托

在上一篇随笔中我们通过示例逐步引入了委托,并比较了委托和接口.本文将重点剖析委托的实质. 委托在本质上仍然是一个类,我们用 delegate 关键字声明的所有委托都继承自System.MulticastDelegate.后者又是继承自System.Delegate类,System.Delegate类则继承自System.Object.委托既然是一个类,那么它就可以被定义在任何地方,即可以定义在类的内部,也可以定义在类的外部. 正如很多资料上所说的,委托是一种类型安全的函数回调机制, 它不仅能够调

C#委托零基础理解

C#委托零基础理解(转) 1,  为什么使用委托  2.什么是委托  3.委托如何使用 为什么使用委托? 委托是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的. 什么是委托? 委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有相同的行为,委托方法的使用和其他方法一样,具有参数和返回值. 如何使用委托 下面咱们

编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变

建议44:理解委托中的协变 委托中的泛型变量天然是部分支持协变的.为什么是“部分支持协变”?看下面示例: class Program { public delegate T GetEmployeeHanlder<T>(string name); static void Main() { GetEmployeeHanlder<Employee> getAEmployee = GetAManager; Employee e = getAEmployee("Mike"