12---Net基础加强

使用ShowDialog窗体之间的回传值:

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

namespace _02使用ShowDialog窗体之间的回传值
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
            MessageBox.Show(f2.userMsg);
            MessageBox.Show("OK");
            
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _02使用ShowDialog窗体之间的回传值
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public string userMsg;

        private void button1_Click(object sender, EventArgs e)
        {
            this.userMsg = this.textBox1.Text;
            this.Close();                                                                                                                                                                                                                             
        }
    }
}

作业1:

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

namespace _01作业
{
    class Program
    {
        static void Main(string[] args)
        {
            //Delegate1 md = M1;
            //md(10,20,30);

            Delegate1 md = arr => Console.WriteLine(arr.Length);
            md(10, 20, 30);
            Console.ReadKey();
        }

        static void M1(params int[] arr)
        {
            Console.WriteLine(arr.Length);
        }
    }

    public delegate void Delegate1(params int[] array);
}

作业-多播委托

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

namespace _03多播委托
{
    class Program
    {
        static void Main(string[] args)
        {
            ////一个委托同时指向了多个方法,这就是多播委托
            //Delegate1 md = M1;
            //md += M2;
            //md += M3;
            //md += M4;
            //md += M5;
            ////md = M6;//如果使用符号为委托赋值,最后会将前面的所有的绑定的委托都覆盖掉

            //md -= M3;
            //md -= M5;

            //md();//当调用委托变量的时候,绑定到该委托上的所有方法都会被调用
            //Console.ReadKey();

            //Delegate1 md = M1;
            //md = (Delegate1)Delegate.Combine(md,new Delegate1(M2));
            //md = (Delegate1)Delegate.Combine(md, new Delegate1(M3));
            //md = (Delegate1)Delegate.Remove(md, new Delegate1(M1));

            AddDelegate md = T1;
            md += T2;
            md += T3;
            //多播委托如果方法有返回值的化,这里只能获取最后一个方法的返回值.
            //int n=md(100,200);
            //Console.WriteLine(n);

            //获取每个方法被调用后的返回值
           Delegate[] mds = md.GetInvocationList();
            //循环遍历mds,获取每个委托对象并调用
           for (int i = 0; i < mds.Length; i++)
           {
               Delegate mm = mds[i];
               int n = ((AddDelegate)mm)(100,200);
               Console.WriteLine(n);
           }

            Console.ReadKey();

        }

        //static int T1(int x,int y)
        //{
        //    return x + y;
        //}

        //static int T2(int x, int y)
        //{
        //    return x + y;
        //}

        //static int T3(int x, int y)
        //{
        //    return x + y;
        //}

        static int T1(int x, int y)
        {
            return 100;
        }

        static int T2(int x, int y)
        {
            return 200;
        }

        static int T3(int x, int y)
        {
            return 300;
        }

        static void M1()
        {
            Console.WriteLine("M1");
        }

        static void M2()
        {
            Console.WriteLine("M2");
        }

        static void M3()
        {
            Console.WriteLine("M3");
        }

        static void M4()
        {
            Console.WriteLine("M4");
        }

        static void M5()
        {
            Console.WriteLine("M5");
        }

        static void M6()
        {
            Console.WriteLine("M6");
        }
    }

    public delegate int AddDelegate(int n1,int n2);
    //定义一个委托
    public delegate void Delegate1();
}

自定义泛型1

 泛型类:

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

namespace _04自定义泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            //List<int> list = new List<int>();
            //泛型是代码重用和算法重用
            //泛型类
            //泛型接口
            //泛型方法
            //泛型委托

            //MyClass<string> mc = new MyClass<string>(new string[] { "A", "B", "C"});
            MyClass<int> mc = new MyClass<int>(new int[]{ 10,20,30});
            mc.Show();
            Console.Read();

        }
    }


    //T Type
    class MyClass<T>
    {
        public MyClass(T[] _names)
        {
            this.names = _names;
        }
        public T[] names = null;

        public void Show()
        {
            foreach (T item in names)
            {
                Console.WriteLine(item);
            }
        }
    }

}

泛型方法:

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

namespace _04自定义泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            //p.show<string>("aaaaaaaaaaaa");
            //p.show("aaaaaaaaaaaa");//这两种都是正确的

            p.show<int>(123);
            Console.ReadKey();

        }
    }


    //泛型方法
    public class Person
    {
        //方法后直接写<T>就表示一个泛型方法
        public void show<T>(T msg)
        {
            Console.WriteLine(msg);
        }
    }

}

泛型接口:

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

namespace _04自定义泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            SpiderMan<string> sm = new SpiderMan<string>();
            sm.Fly("gdsfgsdfgdsfgdsf");
            Console.ReadKey();

        }
    }

    //泛型接口
    public interface IFlyable<T>
    {
        void Fly(T msg);
    }

    //实现泛型接口的时候必须指定对应的泛型类型
    //编写一个类来实现泛型接口
    //一个普通类实现了泛型接口
    public class SupperMan:IFlyable<string>
    {
        #region MyRegion

        public void Fly(string msg)
        {
            Console.WriteLine(msg);
        }
        #endregion
    }

    //一个泛型类实现了泛型接口
    public class SpiderMan<YZK> : IFlyable<YZK>
    {

        public void Fly(YZK msg)
        {
            throw new NotImplementedException();
        }
    }

    //public class SpiderMan<YZK> : IFlyable<string>
    //{

    //    public void Fly(YZK msg)
    //    {
    //        throw new NotImplementedException();
    //    }
    //}
}

泛型委托:

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

namespace _04自定义泛型
{
    public delegate void M1Delegate(string msg);
    public delegate void MGenericDelegate<T>(T msg);
    class Program
    {
        static void Main(string[] args)
        {
            #region 泛型委托

            //M1Delegate md = M1;
            //md("aaaaaaaaaaaaa");
            //Console.ReadKey();

            //MGenericDelegate<string> md = M1;
            //md("aaaaaaaaaaaaa");
            //Console.ReadKey();

            //MGenericDelegate<int> md = M2;
            //md(123);
            //Console.ReadKey();

            MGenericDelegate<double> md = M3;
            md(123.45);
            Console.ReadKey();

            #endregion

        }

        static void M1(string msg)
        {
            Console.WriteLine(msg);
        }
        static void M2(int msg)
        {
            Console.WriteLine(msg);
        }
        static void M3(double msg)
        {
            Console.WriteLine(msg);
        }
        static void M4(float msg)
        {
            Console.WriteLine(msg);
        }
        static void M5(Person msg)
        {
            Console.WriteLine(msg);
        }
    }

    class Person
    { 
    
    }

}

泛型委托:

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

namespace _04自定义泛型
{
    public delegate void M1Delegate(string msg);
    public delegate void MGenericDelegate<T>(T msg);
    class Program
    {
        static void Main(string[] args)
        {
            #region 系统内置的泛型委托
            //只要是Action委托都是无返回值的

            ////存储无参数无返回值的方法
            //Action md = () => { Console.WriteLine("无参数无返回值。"); };
            //md();
            //Console.ReadKey();

            ////存储有几个参数的返回值
            //Action<string,int> md = (s,i) => { Console.WriteLine(s+"     "+i); };
            //md("aaaaaaaaaaaa",123);
            //Console.ReadKey();

            //带返回值的方法的时候,就需要使用另外一个泛型委托Func

            //Func<string> fn = T1;
            //string ss = fn();
            //Console.WriteLine(ss);
            //Console.ReadKey();

            ////返回值是string类型,参数是一个int类型
            //Func<int, string> fn = n => n.ToString();
            //Console.WriteLine(fn(10));
            //Console.ReadKey();

            ////返回值是string类型,参数是一个int类型
            //Func<int,int, string> fn =T2;
            //Console.WriteLine(fn(12,5));
            //Console.ReadKey();

            List<int> list = new List<int>{1,2,3,4,5,6,7,8,9};
            //List<int> listresult = list.FindAll(MyFilter);
            List<int> listresult = list.FindAll(element=>element>5);
            //list.Where(a => a > 5);
            for (int i = 0; i < listresult.Count; i++)
            {
                Console.WriteLine(listresult[i]);
            }
            Console.ReadKey();

            #endregion

        }
        static bool MyFilter(int element)
        { 
            return element>5;
        }
        static string T1()
        {
            return "aaaaaaaaaaaaa";
        }

        static string T2(int n1,int n2)
        {
            return (n1*n2).ToString();
        }
    }

}

泛型约束:

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

namespace _05泛型约束
{
    class Program
    {
        static void Main(string[] args)
        {
            //List<int>list=new List<int>();
            //list.Sort();

            //List<Person> list = new List<Person>();
            //list.Sort();

            //MyClass<string> mc = new MyClass<string>();
            //MyClass<int> mc = new MyClass<int>();

            //MyClass<MyTestClass> mc = new MyClass<MyTestClass>();

            MyClass<Person> mc = new MyClass<Person>();
            
        }
    }

    class MyTestClass : IComparable
    {

        public int CompareTo(object obj)
        {
            throw new NotImplementedException();
        }
    }
    //class AscByAge : IComparable<Person>
    //{

    //    public int CompareTo(Person x,Person y)
    //    {
    //        throw new NotImplementedException();
    //    }
    //}

    class Person:IComparable<Person>
    {
        //public Person(string  s)
        //{ 
        
        //}
        private int _age;

        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }



        public int CompareTo(Person other)
        {
            throw new NotImplementedException();
        }
    }

    ////使用泛型约束,约束了T只能是值类型
    //class MyClass<T> where T:struct
    //{ 
    
    //}

    ////使用泛型约束,约束了T只能是引用类型不能是值类型
    //class MyClass<T> where T : class
    //{

    //}

    //限制T必须是实现了某个接口的类型,要求T必须是实现了IComparable接口的子类型对象或者就是该接口类型对象
    //class MyClass<T> where T : IComparable
    //{

    //}

    ////要求T必须是Person类型或者是Person类的子类型
    //class MyClass<T> where T : Person
    //{

    //}

    ////要求T必须是Person类型或者是Person类的子类型
    //class MyClass<T> 
    //    where T : Person 
    //    where T : new()//要求将来传递进来的类型必须具有一个无参数的构造函数
    //{

    //}

    //对T没有要求,但是V必须是T类型或者T类型的子类型
    class MyClass<T,V>
        where V :T
    {

    }
}

扩展方法:

先建一个静态类

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

namespace _07扩展方法
{
    /// <summary>
    /// 1.增加扩展方法第一步,增加一个静态类,类名随便起
    /// 该静态类应该与将来要用扩展方法的地方在一个命名空间下。
    /// 即便命名空间不一样,用的时候也必须导入该命名空间否则不能使用
    /// </summary>
    static class MethodExt
    {
        //2.向静态类中增加一个静态方法
        //该静态方法的第一个参数就表示要给哪个类型增加该扩展方法
        //第一个修饰符this是必须的,这里的obj就表示将来调用该方法的那个
        public static void SayHello(this Person obj)
        {
            Console.WriteLine("Helllo"+obj.Name);
        }
    }
}

主程序:

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

namespace _07扩展方法
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p.Name = "叶长种";
            p.SayHi();

            //扩展方法
            p.SayHello();
            Console.ReadKey();
        }
    }

    class Person
    {
        public string Name{get;set;}
        public void SayHi()
        {
            Console.WriteLine("Hi~~~~~~~~~~~~");
        }
    }
}

事件介绍:

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

namespace _08事件介绍
{
    class Program
    {
        static void Main(string[] args)
        {
            Mp3Palyer mp3 = new Mp3Palyer();
            mp3.BeforeMusicPlaying = () => { Console.WriteLine("音乐播放之前加载歌曲........."); };
            mp3.BeforeMusicStoping = () => { Console.WriteLine("音乐结束之前保存播放进度........."); };
            mp3.Start();
            mp3.PowerOff();
            Console.ReadKey();
        }
    }

    /// <summary>
    /// Mp3播放器
    /// </summary>
    public class Mp3Palyer
    {
        //希望在音乐开始播放之前插入一段代码,这段代码是由将来调用者来指定的
        public Action BeforeMusicPlaying;

        //希望在音乐停止播放之前插入一段代码,这段代码也是由将来调用者来指定的
        public Action BeforeMusicStoping;

        //启动Mp3
        public void Start()
        {
            Console.WriteLine("启动");
            if (BeforeMusicPlaying!=null)
            {
                //在音乐正式播放之前调用该委托
                BeforeMusicPlaying();               
            }
            //调用 PlayMusic()方法开始播放音乐
            PlayMusic();
        }

        private void PlayMusic()
        {
            Console.WriteLine("音乐开始播放。。。。。。。。。。");
        }


        //关机
        public void PowerOff()
        {
            if (BeforeMusicStoping != null)
            {
                //在音乐结束之前调用该委托
                BeforeMusicStoping();
            }
            //调用停止播放音乐的方法
            Stop();
        }

        //启动Mp3
        public void Stop()
        {
            Console.WriteLine("音乐停止播放");
        }
    }
}

事件案例:

创建控件

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

namespace _09事件案例
{
    public partial class UCTripleButton : UserControl
    {
        public UCTripleButton()
        {
            InitializeComponent();
        }

        //当在声明委托变量的前面加了event关键字自后,则委托变量就不是委托变量了,就立刻变成了事件
        public event Action TripleClick;
        int count = 0;
        //这个是按钮的单击事件
        private void button_Click(object sender, EventArgs e)
        {
            //每次单击一次统计一下
            count++;
            if (count>=3)
            {
                //MessageBox.Show("点了3次!");
                if (TripleClick!=null)
                {
                    //调用一下委托
                    TripleClick(); 
                }
            
                count = 0;
            }
        }
    }
}

窗体1:

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

namespace _09事件案例
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //这里是按钮的单击事件
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("你好!!!!!");
        }

        //委托可以直接赋值,但是事件不能直接赋值
        //事件只能使用+=或者-=来赋值,这样就避免了通过=将之前的注册的事件都覆盖掉
        private void Form1_Load(object sender, EventArgs e)
        {
            //ucTripleButton1.TripleClick = ClickThree;
            ucTripleButton1.TripleClick += new Action(ucTripleButton1_TripleClick);
        }

        void ucTripleButton1_TripleClick()
        {
            Console.WriteLine("事件处理");
        }
        private void ClickThree()
        {
            MessageBox.Show("被点击了三次!");
        }
    }
}

窗体2:

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

namespace _09事件案例
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            //ucTripleButton1.TripleClick = Click3;
            ucTripleButton1.TripleClick += new Action(ucTripleButton1_TripleClick);
        }

        void ucTripleButton1_TripleClick()
        {
            Console.WriteLine("事件处理");
        }
        public void Click3()
        {
            MessageBox.Show("哇塞!!!!被点击了三次哦!!!");
        }

  
    }
}
原文地址:https://www.cnblogs.com/yechangzhong-826217795/p/4157528.html