{"id":291,"date":"2022-06-30T08:33:16","date_gmt":"2022-06-30T00:33:16","guid":{"rendered":"https:\/\/www.fengjijiao.cn\/?p=291"},"modified":"2022-06-30T08:33:46","modified_gmt":"2022-06-30T00:33:46","slug":"c%e4%ba%8b%e4%bb%b6%ef%bc%88event%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.fengjijiao.cn\/?p=291","title":{"rendered":"C#\u4e8b\u4ef6\uff08Event\uff09"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u793a\u4f8b\u4e00<\/h2>\n\n\n\n<p>\u503c\u6539\u53d8\u89e6\u53d1\u4e8b\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\r\n\r\nnamespace ConsoleApp1\r\n{\r\n    \/**\u53d1\u5e03\u5668\u7c7b**\/\r\n    public class EventTest\r\n    {\r\n        private int value;\r\n        public delegate void NumManipulationHandler(int oldvalue, int newvalue);\r\n        public event NumManipulationHandler ChangeNum;\r\n        protected virtual void OnNumChanged(int oldvalue, int newvalue)\r\n        {\r\n            if(ChangeNum != null)\r\n            {\r\n                ChangeNum(oldvalue, newvalue);\/\/\u4e8b\u4ef6\u88ab\u89e6\u53d1\r\n            } else\r\n            {\r\n                Console.WriteLine(\"event not fire\");\r\n                Console.ReadKey();\/**\u56de\u8f66\u7ee7\u7eed**\/\r\n            }\r\n        }\r\n        public EventTest()\r\n        {\r\n            int n = 5;\r\n            SetValue(n);\r\n        }\r\n        public void SetValue(int newvalue)\r\n        {\r\n            int oldvalue;\r\n            if(value != newvalue)\r\n            {\r\n                oldvalue = value;\r\n                value = newvalue;\r\n                OnNumChanged(oldvalue, newvalue);\r\n            }\r\n        }\r\n    }\r\n    \/**\u8ba2\u9605\u5668\u7c7b**\/\r\n    public class SubscribeEvent\r\n    {\r\n        public void printf(int oldvalue, int newvalue)\r\n        {\r\n            Console.WriteLine($\"event fire, old: {oldvalue}, new: {newvalue}\");\r\n            Console.ReadKey();\/**\u56de\u8f66\u7ee7\u7eed**\/\r\n        }\r\n\r\n    }\r\n    \/**\u89e6\u53d1**\/\r\n    class Program\r\n    {\r\n        static void Main(string&#91;] args)\r\n        {\r\n            \/\/C#\u4e8b\u4ef6\r\n            \/*\r\n             * \u4e8b\u4ef6(Event)\u57fa\u672c\u4e0a\u8bf4\u662f\u4e00\u4e2a\u7528\u6237\u64cd\u4f5c\uff0c\u5982\u6309\u952e\u3001\u70b9\u51fb\u3001\u9f20\u6807\u79fb\u52a8\u7b49\u7b49\uff0c\u6216\u8005\u662f\u4e00\u4e9b\u63d0\u793a\u4fe1\u606f\uff0c\u5982\u7cfb\u7edf\u751f\u6210\u7684\u901a\u77e5\u3002\u5e94\u7528\u7a0b\u5e8f\u9700\u8981\u5728\u65f6\u95f4\u53d1\u751f\u65f6\u54cd\u5e94\u65f6\u95f4\u3002\u4f8b\u5982\uff1a\u4e2d\u65ad\u3002\r\n             * C#\u4e2d\u4f7f\u7528\u4e8b\u4ef6\u673a\u5236\u5b9e\u73b0\u7ebf\u7a0b\u95f4\u7684\u901a\u884c\u3002\r\n             * \r\n             *\/\r\n            \/\/\u901a\u8fc7\u4e8b\u4ef6\u4f7f\u7528\u59d4\u6258\r\n            \/*\r\n             * \u4e8b\u4ef6\u5728\u7c7b\u4e2d\u58f0\u660e\u4e14\u751f\u6210\uff0c\u4e14\u901a\u8fc7\u4f7f\u7528\u540c\u4e00\u4e2a\u7c7b\u6216\u5176\u4ed6\u7c7b\u4e2d\u7684\u59d4\u6258\u4e0e\u4e8b\u4ef6\u5904\u7406\u7a0b\u5e8f\u5173\u8054\u3002\u5305\u542b\u4e8b\u4ef6\u7684\u7c7b\u7528\u4e8e\u53d1\u5e03\u4e8b\u4ef6\u3002\u8fd9\u88ab\u79f0\u4e3a\u53d1\u5e03\u5668(publisher)\u7c7b\u3002\u5176\u4ed6\u63a5\u53d7\u8be5\u4e8b\u4ef6\u7684\u7c7b\u88ab\u79f0\u4e3a\u8ba2\u9605\u5668(subscriber)\u7c7b\u3002\u4e8b\u4ef6\u4f7f\u7528\u53d1\u5e03-\u8ba2\u9605\uff08publisher-subscriber\uff09\u6a21\u578b\u3002\r\n             * \u53d1\u5e03\u5668(publisher)\u662f\u4e00\u4e2a\u5305\u542b\u4e8b\u4ef6\u548c\u59d4\u6258\u5b9a\u4e49\u7684\u5bf9\u8c61\u3002\u4e8b\u4ef6\u548c\u59d4\u6258\u4e4b\u95f4\u7684\u8054\u7cfb\u4e5f\u5b9a\u4e49\u5728\u8fd9\u4e2a\u5bf9\u8c61\u4e2d\u3002\u53d1\u5e03\u5668\uff08publisher\uff09\u7c7b\u7684\u5bf9\u8c61\u8c03\u7528\u8fd9\u4e2a\u4e8b\u4ef6\uff0c\u5e76\u901a\u77e5\u5176\u4ed6\u7684\u5bf9\u8c61\u3002\r\n             * \u8ba2\u9605\u5668(subscriber)\u662f\u4e00\u4e2a\u63a5\u53d7\u4e8b\u4ef6\u5e76\u63d0\u4f9b\u4e8b\u4ef6\u5904\u7406\u7a0b\u5e8f\u7684\u5bf9\u8c61\u3002\u5728\u53d1\u5e03\u5668(publisher)\u7c7b\u4e2d\u7684\u59d4\u6258\u8c03\u7528\u8ba2\u9605\u5668(subscriber)\u7c7b\u4e2d\u7684\u65b9\u6cd5\uff08\u4e8b\u4ef6\u5904\u7406\u7a0b\u5e8f\uff09\u3002\r\n             *\/\r\n            \/\/\u58f0\u660e\u4e8b\u4ef6\uff08Event\uff09\r\n            \/*\r\n             * \u5728\u7c7b\u7684\u5185\u90e8\u58f0\u660e\u4e8b\u4ef6\uff0c\u9996\u5148\u5fc5\u987b\u58f0\u660e\u8be5\u4e8b\u4ef6\u7684\u59d4\u6258\u7c7b\u578b\u3002\r\n             * public delegate void BoilerLogHandler(string status);\r\n             * \u7136\u540e\uff0c\u58f0\u660e\u4e8b\u4ef6\u672c\u8eab\uff0c\u4f7f\u7528event\u5173\u952e\u5b57\uff1a\r\n             * \/\/\u57fa\u4e8e\u4e0a\u9762\u7684\u59d4\u6258\u5b9a\u4e49\u4e8b\u4ef6\r\n             * public event BoilerLogHandler BoilerEventLog;\r\n             * \u4e0a\u9762\u7684\u4ee3\u7801\u5b9a\u4e49\u4e86\u4e00\u4e2a\u540d\u4e3aBoilerLogHandler\u7684\u59d4\u6258\u548c\u4e00\u4e2a\u540d\u4e3aBoilerEventLog\u7684\u4e8b\u4ef6\uff0c\u8be5\u4e8b\u4ef6\u5728\u751f\u6210\u7684\u65f6\u5019\u4f1a\u8c03\u7528\u59d4\u6258\u3002\r\n             * \r\n             *\/\r\n            \/\/\u5b9e\u4f8b1\r\n            EventTest et = new EventTest();\/*\u5b9e\u4f8b\u5316\u5bf9\u8c61\uff0c\u7b2c\u4e00\u6b21\u6ca1\u6709\u89e6\u53d1\u4e8b\u4ef6*\/\r\n            SubscribeEvent sv = new SubscribeEvent();\/*\u5b9e\u4f8b\u5316\u5bf9\u8c61*\/\r\n            et.ChangeNum += new EventTest.NumManipulationHandler(sv.printf);\/*\u6ce8\u518c*\/\r\n            et.SetValue(5);\/\/\u4e0e\u9ed8\u8ba4\u503c\u4e00\u81f4\uff0c\u4e0d\u89e6\u53d1\u4e8b\u4ef6(if(value != newvalue))\r\n            et.SetValue(15);\r\n\r\n            Console.ReadKey();\r\n        }\r\n    }\r\n}<\/code><\/pre>\n\n\n\n<p>\u63a7\u5236\u53f0\u8f93\u51fa<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>event not fire\r\nevent fire, old: 5, new: 15\r<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u793a\u4f8b\u4e8c<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\r\nusing System.IO;\r\n\r\nnamespace ConsoleApp1\r\n{\r\n    class Boiler\r\n    {\r\n        private int temp;\r\n        private int pressure;\r\n        public Boiler(int t, int p)\r\n        {\r\n            temp = t;\r\n            pressure = p;\r\n        }\r\n        public int getTemp()\r\n        {\r\n            return temp;\r\n        }\r\n        public int getPressure()\r\n        {\r\n            return pressure;\r\n        }\r\n    }\r\n    \/\/\u4e8b\u4ef6\u53d1\u5e03\u5668\r\n    class DelegateBoilerEvent\r\n    {\r\n        public delegate void BoilerLogHandler(string status);\r\n        \/\/\u57fa\u4e8e\u4e0a\u9762\u7684\u59d4\u6258\u5b9a\u4e49\u4e8b\u4ef6\r\n        public event BoilerLogHandler BoilerEventLog;\r\n        public void LogProcess()\r\n        {\r\n            string remarks = \"O. K\";\r\n            Boiler b = new Boiler(100,12);\r\n            int t = b.getTemp();\r\n            int p = b.getPressure();\r\n            if(t > 150 || t &lt; 80 || p &lt;12 || p > 15)\r\n            {\r\n                remarks = \"Need Maintenance\";\r\n            }\r\n            OnBoilerEventLog(\"Logging Info: \\n\");\r\n            OnBoilerEventLog($\"Tempature: {t}\\nPressure: {p}\");\r\n            OnBoilerEventLog($\"\\nMessage: {remarks}\\n\");\r\n        }\r\n        protected void OnBoilerEventLog(string message)\r\n        {\r\n            if(BoilerEventLog != null)\r\n            {\r\n                BoilerEventLog(message);\r\n            }\r\n        }\r\n    }\r\n    \/\/\u8be5\u7c7b\u4fdd\u7559\u5199\u5165\u65e5\u5fd7\u6587\u4ef6\u7684\u6761\u6b3e\r\n    class BoilerInfoLogger\r\n    {\r\n        FileStream fs;\r\n        StreamWriter sw;\r\n        public BoilerInfoLogger(string filename)\r\n        {\r\n            fs = new FileStream(filename, FileMode.Append, FileAccess.Write);\r\n            sw = new StreamWriter(fs);\r\n        }\r\n        public void Logger(string info)\r\n        {\r\n            sw.WriteLine(info);\r\n        }\r\n        public void Close()\r\n        {\r\n            sw.Close();\r\n            fs.Close();\r\n        }\r\n    }\r\n    class Program\r\n    {\r\n        static void Logger(string info)\r\n        {\r\n            Console.WriteLine(info);\r\n        }\r\n        static void Main(string&#91;] args)\r\n        {\r\n            BoilerInfoLogger filelog = new BoilerInfoLogger(\"D:\\\\view\\\\boiler.log\");\r\n            DelegateBoilerEvent boilerEvent = new DelegateBoilerEvent();\r\n            boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(Logger);\r\n            boilerEvent.BoilerEventLog += new DelegateBoilerEvent.BoilerLogHandler(filelog.Logger);\r\n            boilerEvent.LogProcess();\r\n\r\n            Console.ReadKey();\r\n\r\n            filelog.Close();\r\n        }\r\n    }\r\n}<\/code><\/pre>\n\n\n\n<p>\u63a7\u5236\u53f0\u8f93\u51fa<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Logging Info:\r\n\r\nTempature: 100\r\nPressure: 12\r\n\r\nMessage: O. K\r<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">event\u5173\u952e\u5b57\u4f5c\u7528<\/h2>\n\n\n\n<p>event\u2208delegate\uff0c\u4e8b\u4ef6\uff08Event\uff09\u548c\u59d4\u6258\uff08delegate\uff09\u7684\u533a\u522b\uff1a<\/p>\n\n\n\n<p>1.\u58f0\u660eevent\u540e\u4e8b\u4ef6\u5728\u7c7b\u5916\u53ea\u80fd\u4f7f\u7528+=\u548c-=\u4fee\u6539\uff0c\u4e0d\u80fd\u4f7f\u7528=\uff08\u8d4b\u503c\uff09\uff0c\u800c\u59d4\u6258\u65e0\u6b64\u9650\u5236\u3002<\/p>\n\n\n\n<p>2.\u58f0\u660eevent\u540e\uff0c\u4e8b\u4ef6\u4e0d\u80fd\u5728\u7c7b\u5916\u76f4\u63a5\u8c03\u7528\uff0c\u800c\u59d4\u6258\u65e0\u6b64\u9650\u5236\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u793a\u4f8b\u4e00 \u503c\u6539\u53d8\u89e6\u53d1\u4e8b\u4ef6 \u63a7\u5236\u53f0\u8f93\u51fa \u793a\u4f8b\u4e8c \u63a7\u5236\u53f0\u8f93\u51fa event\u5173\u952e\u5b57\u4f5c\u7528 event\u2208delegate\uff0c\u4e8b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[19],"tags":[21],"_links":{"self":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts\/291"}],"collection":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=291"}],"version-history":[{"count":2,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts\/291\/revisions"}],"predecessor-version":[{"id":294,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=\/wp\/v2\/posts\/291\/revisions\/294"}],"wp:attachment":[{"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fengjijiao.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}