1、ref与out关键字

不同点:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

ref:参数传入方法前,需要先赋值。

out:参数传入方法前,对赋值没有要求,但是方法内必须对参数赋值。

(如果没按要求赋值,编辑器会报错)

相同点:

ref与out标记参数时,方法内改变参数的值,变量的值也发生变化。

protected void Page_Load(object sender, EventArgs e)
    {
        string j="初始值";
        refTest(ref j);
        Console.Write(j); //此时j="改变值",out与ref都会改变 变量 的值。
        test(j);
        Console.Write(j); //此时j="改变值",test方法并没有将j的值改变
    }
    static void refTest(ref string a)
    {
        a = "改变值";
    }

    static void test(string a)
    {
        a = "改变不了";
    }

 2、委托与事件

场景:下一个页面(类)去执行上一个页面(类)的方法。(A页面跳转到B页面,在B页面通过事件的方法,触发A页面的方法运行。)

   A页面:

   B  b=new B();

   b.event +=new  B().method(test);      //事件可以添加多个,里面的方法会依次执行 

  b.main();

  private void test()

  {

      //一些操作,例如girdView重新加载数据

  }

   B页面:

   public delegate void method();

   public event method event1;

   public void main()

   {

       if(event1!=null)

        {

               event1();   //此时会触发A页面页面的test方法。

        }

   }

A页面:

public partial class delegate1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Class1 cl = new Class1();
        cl.shijian += new Class1.weituo(test);   //将test方法委托
        cl.test2(); //执行class1的test2方法

    }
    private void test()
    {
        string a = "ceshi";
    }
}

 B页面:

public class Class1
{
    public delegate void weituo();
    public event weituo shijian;
    public void test2()
    {
        if (shijian != null)
        {
            shijian();  //此时去执行A页面里面test方法。
        }
    }
}

 使用规范:

(1). 委托类型的名称都应该以 EventHandler 结束。

(2). 委托的原型定义:有一个void 返回值,并接受两个输入参数:一个Object 类型,一个EventArgs 类型(或继承自EventArgs)。

(3). 事件的命名为委托去掉 EventHandler 之后剩余的部分。

(4). 继承自 EventArgs 的类型应该以EventArgs 结尾。

3、泛型

    class A<T> where T : class    //T必须是一个class类型

     {

             public T  a;

             public T  method(T t)

             {

                      return t;

             }

     }

       where T : struct | T必须是一个结构类型
  where T : class T必须是一个类(class)类型
  where T : new() | T必须要有一个无参构造函数
  where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
  where T : NameOfInterface | T必须实现名为NameOfInterface的接口

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄