asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP)

时间:2020-08-03 11:21:29 来源:

【摘要】 asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP)考必过小编为大家整理了关于asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP)的信息,希望可以帮助到大家!

asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP)

标签:类型转换   method   type   service   价值   ESS   影响   运行   map   

特性attribute: 修饰作用


attribute声明,标识,生效,原理,扩展,aop思想的体现;
attribute声明:[]放在方法上,或类上,属性上,起修饰作用
1.常见的特性(你知道特性吗?用过吗?你知道的特性举例说明一下):
[Obsolete(“请使用xxx代替”,ture)]://影响编译器
[Serialize]//序列化
[httpPost]
[httpGet]//mvc webapi
[webMethod]//webservice 只有加了这个标记,才可以做为webservice接口使用
[ServiceContract]//wcf
[DependencyInjection]//IOC
[Required table key]//ORM

2.特性有什么用?
只有加了这个标记,才可以做为xxx接口使用,否则外部不能识别。

3.为什么加了此特性,会被发现为服务?
a>特性attribute:就是一个类,直接,间接继承自Attribute,一般以attribute结尾,标记时可以省略
b>特性有什么用:声明--标记
给属性添加特性后,在属性内部产生了一个.custom的元素;
ILSPY :反编译工具
IL:编译的中间语言,看IL能更深刻理解C#代码
c>特性是怎么生效的?
c#反射reflection 可以获取并使用metadata,在程序运行额过程中通过反射,可以检测到特性,获取特性实例,使用特性的实例;

d>ServiceContract为什么可以变成服务呢?
ServiceContract标记到接口,检测ServiceContract特性,有才展示,没有的不展示;

特性attribute本身没有价值,必须在程序运行的过程中,用反射主动发现并使用才有价值;

4>AOP 面向切面编程;
在不破坏封装的前提下,去增加额外的功能;

调用别人的接口返回的数据MODEL想转换为自己的MODEL(数据库MODEL,页面viewmodel)
一个类转换为另一个类model

1.利用反射 转换: 一个类转换为另一个类model
StudentDto dto=Trans<Student,Studentdto>(student);
PeopleDto dto=Trans<People,PeopleDto>(people);

private static Tout Trans<Tin,Tout>(Tin,tin)
{
Type typeOut=typeof(Tout);
Type typeIn=typeof(Tin);
Tout tout=(Tout)Activator.CreateInstance(typyOut);
//属性
foreach(var pro in typeOut.GetProperties()){
PropertyInfo propIn=typeIn.GetProperties(prop.Name);
object ovalue=propin.GetValue(tin);
prop.SetValue(tout,ovalue);
}
//字段
foreach(var field in typeOut.GetFields()){
FieldInfo fieldIn=typeIn.GetField(field.Name);
object ovalue=fieldIn.GetValue(tin);
fieldIn.SetValue(tout,ovalue);
}

return tout;
}


2.利用序列化json 转换,一个类转换为另一个类model
string sstudent=JsonConvert.SerializeObject(student);
StudentDto studentDto=JsonConvert.DeserializeObject<StudentDto>(sstudent);


3. automapper 类型转换工具,为ORM工具而生;
Mapper.Initialize(x=>x.createMap<Student,StudentDto>());
StudentDto dto=Mapper.Map<Student,StudentDto>(student);


4.动态生成硬编码,表达式目录树:expression
性能好,无法通用;通用性能不好。
new List<int>().AsQueryable().where(i=>i>5);

Func<Student,StudentDto> func=s=>new StudentDto()
{
Id=s.Id,
Name=s.Name,
Age=s.Age
};
//动态拼装目录树

asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP)

标签:类型转换   method   type   service   价值   ESS   影响   运行   map   

以上就是asp.net 高级应用 特性Attribute ( 声明,原理,扩展,AOP)的内容,更多资讯请及时关注考必过网站,最新消息小编会第一时间发布,大家考试加油!

上一篇      下一篇
前端相关推荐 更多>>
ASP.NET MVC 表单提交多层子级实体集合数据到控制器中 ASP.Net Core 发布后,静态资源访问不了 asp.net core 3.1 自定义中间件实现jwt token认证 Devexpress aspxgridview oncustomcallback 无刷新更新数据 Mataasploit 常见问题 device-aspect-ratio与aspect-ratio单屏布局 wsl 2 unbuntu 部署 asp.net core 使用 nginx 做 请描述ASPF原理和NAT ALG原理、区别和联系(HCIE-Securi
前端热点专题 更多>>
热点问答
国家公务员考试年龄限制是多少 公务员国考和省考考试内容有什么区别 函授大专学历能不能考公务员 国家公务员考试考点能自己选择吗 新闻学专业能报考2022年公务员考试吗 什么是联合培养研究生 什么是破格录取研究生 什么人不适合读研 研究生报名户口所在地填什么 研究生结业和毕业有什么区别
网站首页 网站地图 返回顶部
考必过移动版 https://m.kaobiguo.net