.Net: C#中的委托(Delegate)和事件(Event)

2021-04-14 23:28

阅读:588

YPE html>

我举两个实例。

1,[3a]不同语言的问候。

2,[3b]中文版QQ和Tencent QQ(国际版QQ)用户个人信息的”性别“呈现。

 

3、两个委托(Delegate)实例解析。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// 
/// 语言类
/// 
namespace Gyg.DE.Models
{
    public class Language
    {
        /// 
        /// 声明一个委托
        /// 
        /// 
        public delegate string GrateingDelegate(string name);

        /// 
        /// 中式问候
        /// 
        /// 
        /// 
        public static string EngGrateing(string name)
        {
            return "英文名字=" + name;
        }

        /// 
        /// 英式问候
        /// 
        /// 
        /// 
        public static string ChinaGreateing(string name)
        {
            return "中文名字=" + name;
        }

        public static string GreatePerpon(string name, GrateingDelegate gratePerpon)
        {
            return gratePerpon(name);
        }
    }
}

 

 案例2:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Gyg.DE.Models
{
    public class Sex
    {
        public delegate string SexDalegate(string sexCode);

        public static string ChinaSex(string sexCode)
        {
            switch (sexCode)
            {
                case "0":
                    return "";
                case "1":
                    return "";
                default:
                    return "未知";
            }
        }

        public static string EngSex(string sexCode)
        {
            switch (sexCode)
            {
                case "0":
                    return "girl";
                case "1":
                    return "boy";
                default:
                    return "Unknown";
            }
        }

        public static string SexConvert(string sexCode, SexDalegate sexConvert)
        {
            return sexConvert(sexCode);
        }
    }
}

 

 

控制器代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using Gyg.DE.Models;

namespace Gyg.DE.Controllers
{
    public class PerponController : Controller
    {
        // GET: Perpon
        public ActionResult Index()
        {
            string name = Language.GreatePerpon("顾牡丹", Language.ChinaGreateing);
            string nameEng = Language.GreatePerpon("gyg", Language.EngGrateing);

            ViewData["name"] = name;
            ViewData["nameEng"] = nameEng;

            return View();
        }

        public ActionResult SexTest()
        {
            ViewData["ChinaSex"] = Sex.SexConvert("0", Sex.ChinaSex);
            ViewData["EngSex"] = Sex.SexConvert("1", Sex.EngSex);
            return View();
        }
    }
}

 

页面代码:

@{
    Layout = null;
}

"viewport" content="width=device-width" />
    Index
@ViewData["name"]
@ViewData["nameEng"]
"/Perpon/SexTest">SexTest
@{
    Layout = null;
}




"viewport" content="width=device-width" />
    SexTest
@ViewData["ChinaSex"]
@ViewData["EngSex"]
"/Perpon/Index">Index

 

 

4、使用委托(Delegate)有哪些好处?

我们现在对委托做一个总结:

  委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

 


评论


亲,登录后才可以留言!