C# 面试图解


1.文件类型IO

2.委托

 定义:将方法做为方法的参数

实现步骤

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

namespace Delegate {
    1. //定义委托,它定义了可以代表的方法的类型
     public delegate void GreetingDelegate(string name);
        class Program {

2.定义两个函数,参数要相同
           private static void EnglishGreeting(string name) {
               Console.WriteLine("Morning, " + name);
           }

           private static void ChineseGreeting(string name) {
               Console.WriteLine("早上好, " + name);
           }

  3.注意此方法,它接受一个GreetingDelegate类型的方法作为参数
           private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
               MakeGreeting(name);
            }

           static void Main(string[] args) {
               GreetPeople("Jimmy Zhang", EnglishGreeting);
               GreetPeople("张子阳", ChineseGreeting);
               Console.ReadKey();
           }
        }
    }

输出如下:
Morning, Jimmy Zhang
早上好, 张子阳

多播委托

1.public delegate void DelTest();
    class Program
    {
        static void Main(string[] args)
        {
          3.  DelTest del = Test1;
            del += Test2;
            del += Test3;
            del += Test4;
            del -= Test3;
            del += Test3;

            del();
            Console.ReadKey();
        }

      2.0  static void Test1()
        {
            Console.WriteLine("我是Test1");
        }

      2.1 static void Test2()
        {
            Console.WriteLine("我是Test2");
        }

        static void Test3()
        {
            Console.WriteLine("我是Test3");
        }

        static void Test4()
        {
            Console.WriteLine("我是Test4");
        }
    }

3.窗体之间的传值

窗体1<---窗体2

(1) 通过静态字段传值

在DataClass中代码

 class DataClass
    {
        //存储窗体2中文本框的文本 作为全局共享的资源
        public static string _text;
    }

在form2

 // DataClass._text=textBox1.Text.trim();

在fom1 中

 private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm= new Form2();

frm2.SHow();
        }

 再加一个定时器

label1.Text=DataClass._text;

 如果是委托

在form2

public delegate  void DelTest(string str);
    public partial class Form2 : Form
    {
        private DelTest _del;//存储Form1传送过来的函数
        public Form2(DelTest del)
        {
            this._del = del;
            InitializeComponent();
        }
在form1 中
 //将Form2传送过来的数据 赋值给Label
        void ShowText(string str)
        {
            label1.Text = str;
        }
  private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2(ShowText);
            frm2.Show();

          
        }

委托和事件

委托和事件的区别

  //委托是不安全,所有用事件,属于多播委托
   //事件是一个类型安全的委托
    //事件不能在外部调用,委托只能在内部调用

class Program
    {
        static void Main(string[] args)
        {

            PlayMusic p = new PlayMusic("");
            p.DelPlayOver += P_DelPlayOver;              
        }


        private static void P_DelPlayOver(object sender, EventArgs e)
        {
            PlayMusic p = sender as PlayMusic;
            Console.WriteLine(p.Name+"播放Ok");
        }
    }

    class PlayMusic
    {
     1.   public event EventHandler DelPlayOver;//注册事件
        
    public string Name { get; set; }
        public PlayMusic(string name)
        {
            this.Name = name;
        }
      2.  public void PlaySong()
        {
            Console.WriteLine("正在播放{0}",this.Name); ;
            Thread.Sleep(3000);
            if (DelPlayOver!=null)
            {
                EventArgs e = new EventArgs();
                DelPlayOver(this, e);
            }
            
        }
       
    
    }

步骤1. 声明事件

      2.调用事件,调用前必须注册, 要必须加+=,给其来一个函数

      3. 执行

     多event ,另外一个是+=


 3.泛型

 提高代码的复用性,避免了装箱操作,类型安全

MyList<myClass> list1= new MyList<MyList>()

 泛型接口,参数,方法(可以通过多个参数来重载),泛型委托

public delegate void MyDelegate<T>(T item);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值