C#笔记
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的接口
