c#高级篇部分总结

静态方法

特点:生命周期长,一旦创建;应用结束时才会结束,全局,效率高。

用处:用户登录信息,系统配置信息,系统设置,SQLHelper

注意:静态的东西创建多了占用内存会很大,不是必要的情况不要创建静态的对象。

调用:静态方法内调用非静态方法,不能直接调用。

析构方法

作用:释放对象

谁在使用:GC垃圾回收器在调用。

垃圾回收机制:

回收非托管资源---Windows窗口句柄、数据库接、GDI对象、独占文件锁等等对象。

Dispose()需要实现IDisposeable接口。

Close()和Dispose()区别close()方法关闭对象,没有完全释放,Dispose()方法完全释放了。

抽象方法

注意:一定要写在抽象类里面,而且不能new 不能带方法体。

使用场合:强制性一定要实现。

与接口区别使用场合

区别:抽象类只能单继承,而接口能实现多继承。

      抽象类里可以写普通方法,虚方法等,接口只能写规范,不写实现。

使用场合:抽象类一般常用于不会经常改动,然后抽象范围大一些的事件

          接口适用于经常修改,知识一个规范的地方。

扩展方法

扩展方法ExtendMethod:

        定义:在静态类中定义静态的扩展方法。

使用:调用密封类中的对象,属性或者方法。(扩展密封类)

      扩展接口

Public static void 方法名(this 用密封类创建的对象){}

 

泛型

泛型的最大优点就是做到了通用。

可以传入多个参数。

object类型做数据转换时有拆装箱操作有性能消耗,建议少用。类型不安全。

泛型可以规定传什么类型的数据

字典

泛型 Dictionary<k,v>泛型字典 键值对

Key不能重复

自定义泛型

class MyGeneric<T>

    {

        private T ts;

        public MyGeneric(T a)

        {

            this.ts = a;

        }

}

泛型方法

Public void Show<T>(T t)

{

 

};

泛型约束

 

Public void Show<T>(T t)where T:new()//约束--表示T类型只接收一个无参构造函数new T()。

{

 

};

Struct 值类型约束

Class 引用类型约束(基类约束)只能有一个而且要放前面,接口约束可以多个。

自定义类型约束

值类型--结构类型struct/int/double/bool/枚举

引用类型 数组、类、接口、委托、object、字符串

自定义类型(自己创建的类)

泛型协变逆变

out只能是返回值,in只能是参数

什么情况下使用,在知道自己或者别人以后有用到父类通过子类实例化,或者子类通过父类实例化的情况下可以加上out或者in关键字.

 

            People people = new People();

            People people1 = new Teacher();

            Teacher teacher = new Teacher();

            //Teacher teacher1 = new People();

 

            List<People> peoples = new List<People>();

从现实中理解下列语句应该正确,但是从类型方面理解List<People>和List<Teacher>并不属于同一类。

原因是语法规则不支持 .net 2.0 ,3.0的时候才有协变和逆变

协变和你便是针对泛型接口和泛型委托来说的,离开他们就没有这个说法。

Out关键字代表的是协变,in代表的是协变

            //List<People> peoples1 = new List<Teacher>();

Default关键字 return default;如果是值类型默认返回0是引用类型默认返回null

逆变:

in修饰,逆变后,T只能作为参数 不能做返回值

 

Interface IListN<in T>

{

//T GetT();

 Void show(T t);

}

Class ListIN<T>:IListN<T>

{

Public void Show(T t)

{

}

}

协变:

协变只能返回结果,不能做参数

Interface IListN<in T>

{

T GetT();

// Void show(T t);

}

Class ListIN<T>:IListN<T>

{

Public void Show(T t)

{

}

}

泛型总结

泛型的用处  让泛型类,泛型方法,泛型接口,泛型委托,更通用。

反射

exe /dll主要区别是exe文件有入口,metadata(元数据:描述exe/dll文件的一个数据清单)

反射(Reflection)用来操作获取元数据(metadata)

  1. 更新程序时(替换dll文件)(更新自己的dll文件)
  2. 使用别人的Dll文件(这种可以读取别人的私有的东西)

 

反射:一个操作元数据metadata 的一个类库(可以把反射当成一个小工具用来读取或者操作元数据)

 

操作dll文件里的类、方法、特性、属性字段

使用原因:因为我们需要动态读取私有的对象。

 

使用的地方:asp.net MVC ---ORM--LOC--AOP几乎所有的框架都会使用反射。

 

反射--反射工具--操作元数据metadata的工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值