zoukankan      html  css  js  c++  java
  • 文档02_面向对象

    面向对象学习
    此思想需要自行领悟!
    关于委托
    委托是一种类,将委托的方法执行,参数即方法传递的参数

    class Program
        {
            static void Main(string[] args)
            {
                Program p = new Program();
                weituo d = p.ch;//简单委托
                d("123");
                Console.ReadKey();
            }
            public delegate void weituo(string str);
            public void ch(string str)
            {
                Console.WriteLine("委托 "+str );
            }
        }
    


    复杂

    class Program
        {
            static void Main(string[] args)
            {
                Program p = new Program();
                weituo d = new weituo(p.ch);//初始赋值委托
                d += p.ch;//
                d += p.chc;
                d("123");
                p.wt("456", new weituo(delegate(string str) { Console.WriteLine("匿名 委托 " + str); }));
                //委托必须要赋值,封装命名方法或者匿名方法
                Console.ReadKey();
            }
            public delegate void weituo(string str);
            public int b=11;
            public void ch(string str)
            {
                Console.WriteLine("ch 委托 "+str );
            }
            public void chc(string str)
            {
                Console.WriteLine("chc 委托 " + str);
            }
            public void wt(string value,weituo wei)
            {
                wei(value);
            }
        }
    


    深入

    class UserClass
        {
            public string name { get; set; }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Program p = new Program();
                weituo d = new weituo(p.ch);//初始赋值委托
                d += p.ch;//多播委托
                d += p.chc;
                d("123");
                d("852");
                //匿名委托函数
                p.wt("456", new weituo(delegate(string str) { Console.WriteLine("匿名 委托 " + str); }));
    
                weituo<Program> w = new weituo<Program>(p.wtfx);
                w("ppppp",p);
                UserClass u = new UserClass() { name = "lww" };
                weituo<UserClass> wi = new weituo<UserClass>(p.uwtfx);
                wi("value",u);
                //委托必须要赋值,封装命名方法或者匿名方法
                //它的参数值是符合参数类型的方法
                Console.ReadKey();
            }
            public delegate void weituo(string str);
            //泛型委托
            public delegate void weituo<T>(string str,T t);
            public int b=11;
            public void ch(string str)
            {
                Console.WriteLine("ch 委托 "+str );
            }
            public void chc(string str)
            {
                Console.WriteLine("chc 委托 " + str);
            }
    
            public void wt(string value,weituo wei)
            {
                wei(value);
            }
            //泛型委托
            public void wtfx(string value, Program p)
            {
                //Console.WriteLine("委托 " + value);
                p.ch(value);
            }
            //泛型委托
            public void uwtfx(string value, UserClass u)
            {
                Console.WriteLine(value+"委托 " + u.name);
            }
        }
    


    关于委托的返回值:如果委托中有返回值并且在调用列表中有一个以上的方法,调用列表中最后一个方法返回的值就是委托调用返回的值,调用列表中所有其他方法的返回值都会被忽略
    ref 与 out,在初始时ref的参数传递之前必须赋有初值,out则不用



    关于事件(event)
    在窗体中拖动一个button控件
     常用创建事件
     
     
    在配置文件Form1.Designer.cs中注册了事件

    /*事件接收发送初探*/

    public delegate void MyEventHander(object sender, MyEventArgs e);/*定义委托*/
        public partial class Form1 : Form
        {
            public static event MyEventHander Action;/*定义事件*/
            public Form1()
            {
                InitializeComponent();
                //通过委托建立事件
                //public delegate void EventHandler(object sender, EventArgs e);
                button1.Click += new EventHandler(delegate(object o, EventArgs a) /*匿名创建*/
                    {
                        button1.Text = "***制造";
                    });
                button1.Click += Lw;/*累加创建*/
                 
            }
    
            private void Lw(object o, EventArgs e)
            {
                UserEvent u=new UserEvent();//这个类相当于form1,在其中注册了事件
                MyEventArgs Mye=new MyEventArgs();
                /*理解01*/
                Form1.Action(this,Mye);
                button1.Text = u.value;
                /*理解02*/
                u.MyActionEvent += u_MyActionEvent;/*窗体事件原理*/
    
            }
            private void u_MyActionEvent(object sender, MyEventArgs e)
            {
                e.Message = "998";/*自定义*/
             button1.Text = e.Message;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                /*常用普通形式*/
            }
            
        }
    
        /*消息类*/
        public class MyEventArgs :EventArgs
        {
            public string Message { get; set; }
        }
        public class UserEvent
        {
            /*申明事件*/
            public event MyEventHander MyActionEvent;
            public UserEvent()
            {
                Form1.Action+=new MyEventHander(OnAction);
            }
            /*在类中创建*/
            public void OnAction(object sender,MyEventArgs e)
            {
                e.Message="123456789";
                value=e.Message;
            }
            public string value{get;set;}
        }
    







    因缘际会的相遇,自当有非同寻常的结局 QQ交流群:110826636
  • 相关阅读:
    python 多线程实例
    手把手教你做酷炫的数据可视化大屏,零基础的你仅需6步
    化繁为简:数据库运维人员应该知道这些...
    凭什么它能成为报表神器?这五大技术硬货不得不服
    《算法图解》学习笔记(九):动态规划(附代码)
    前端布局总结(持续更新)
    前端布局总结(持续更新)
    前端布局总结(持续更新)
    前端布局总结(持续更新)
    linux之centos安装jdk以及nginx详细过程
  • 原文地址:https://www.cnblogs.com/RainbowInTheSky/p/3044013.html
Copyright © 2011-2022 走看看