谁知到 属性转移 呼叫转移是什么意思?

C#中属性PropertyInfo的使用(转)
C#中属性PropertyInfo的使用(转)
改变一生命运:人工智能机器学习深度学习Python视频2018最新版
↓↓↓★★★☆☆冲刺80万年薪,扫码获得视频链接,入微信学习群↓↓↓★★★☆☆
马开东云搜索--为百万程序员,站长服务,关注Python,Java及Web框架,大数据Hadoop MR Hive Hbase Spark Storm,自然语言NLP,机器学习 K-means 朴素贝叶斯 SVM 随机森林等,推荐系统协同过滤,神经网络CNN RNN,深度学习TensorFlow,IT互联网,科技资讯,想你所想,知你不知,共享信息,改变世界!做个用代码改变世界的程序员,我喂自己袋盐.
昨天编程遇到一个问题两个类字段都是二十多个,其中有十多个是相同的,需要将一个类的字段赋值给另外一个类,开始的自己想手动的一个个去赋值,后来想来一下C#基础知识,用PropertyInfo就可以解决类似的问题,博客园写博客需要内容详实,我还是慢慢的C#属性从头写起,先看下属性的定义吧:
属性定义:它提供灵活的机制来读取、编写或计算某个私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。 这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。属性通常可以分为常规属性和自动属性。两者之间还是有一点区别的,最开始编程对着两个全无概念。
&常规属性以前做Winform的时候经常使用,现在开始使用EF,基本上都是使用自动属性,看下常规属性的完成构成:此文来自: 马开东云搜索
转载请注明出处 网址:
此文原标题: C#中属性PropertyInfo的使用(转)
来源网址:
1.私有字段,一般设置为私有,通过属性来赋值保证起安全性:
private&string&_
2.get访问器,负责读取数据,其中可以进行自己的逻辑判断和数据验证,以return或者throw结束:
get &{ &&&&&//年龄返回值判断 &&&&&return&_age& 0 ? _age: 0; &}
3.set访问器,负责给属性赋值,类似于一个返回类型为void的方法,可以包含逻辑处理,例如可以根据默认的值通过计算后返回结果。
& &上面简单的说了一下常规属性,当属性访问器中不需要其他逻辑时,可以使用自动属性,不过需要注意一点的就是声明自动属性时,编译器将创建一个私有的匿名后备字段,该字段只能通过属性的 get 和 set 访问器进行访问。
public&int&Id { }
自动属性没有太多可以可以说的东西,简单的对比一下常规属性和自动属性之间的区别吧:
& & & & 1.自动实现的属性必须同时声明 get 和 set 访问器。创建 readonly 自动实现属性时,需要将set 访问器设置为private&。
&&&&&&& 2自动实现的属性上可以使用特性,不能用在支持后备字段上。 如果属性的后备字段上使用特性,则应该只创建常规属性。 &&&&&& &3.自动实现属性get,和set中不能包含特殊的逻辑处理。与字段类似,但不同于字段。与字段不同,属性不作为变量来分类,不能将属性作为 ref参数或 out参数传递。
属性PropertyInfo的使用
&上面大概简单的说了一下属性和自动属性之间的区别,现在可以回归到文中最开始的时候的那个问题:
1.案例1,如果两个类中有大部分的字段相同,需要将其中一个类的字段赋值给另外一个类:
定义Person类:
1 2 3 4 5 6 7 8 9 10 11
public&class&Person { &&&&&&&public&Person(int&id,string&name,string&address) &&&&&&&{ &&&&&&&&&&&this.Id = &&&&&&&&&&&this.Name = &&&&&&&&&&&this.Address = &&&&&&&} &&&&&&&public&int&Id { } &&&&&&&public&string&Name { } &&&&&&&public&string&Address { } &&&}
&定义User类
public&class&User { &&&&&&&public&int&Id { } &&&&&&&public&string&Name { } &&&&&&&public&string&Group { } &&&}
 转换方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public&static&User ConvertObject(User user,Person person) &&&&&&&{ &&&&&&&&&&&PropertyInfo[] userPro = user.GetType().GetProperties(); &&&&&&&&&&&PropertyInfo[] personPro = person.GetType().GetProperties(); &&&&&&&&&&&if&(userPro.Length&0&&personPro.Length&0) &&&&&&&&&&&{ &&&&&&&&&&&&&&&for&(int&i = 0; i & userPro.L i++) &&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&for&(int&j = 0; j & personPro.L j++) &&&&&&&&&&&&&&&&&&&{&br&              //判断User的属性是不是的Person中 &&&&&&&&&&&&&&&&&&&&&&&if&(userPro[i].Name == personPro[j].Name && userPro[i].PropertyType == personPro[j].PropertyType) &&&&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&&&Object value=personPro[j].GetValue(person, null); &&&&&&&&&&&&&&&&&&&&&&&&  //将Person中属性的值赋值给User&br&               && userPro[i].SetValue(user,value , null); &&&&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&} &&&&&&&&&&&} &&&&&&&&&&&return& &&&&&&&}
 方法的调用:
1 2 3 4 5 6 7 8 9 10
static&void&Main(string[] args) &&&&&&{ &&&&&&&&&&Person person = new&Person(1,"FlyElephant","北京"); &&&&&&&&&&User user = new&User(); &&&&&&&&&&user.Id = 20; &&&&&&&&&&user = ConvertObject(user, person); &&&&&&&&&&Console.WriteLine("Id:"&+ user.Id + "Name:"&+ user.Name + "角色:"&+ user.Group); &&&&&&&&&&System.Console.Read(); &&&&&&} &&&&&
2.之前在做Winform的时候就经常回使用到SqlHelper,现在也有很多公司是这么使用的,当时很多东西感觉就是重复性的操作,一度以为编程只是复制粘贴,下面这段代码大家应该很常见:
1 2 3 4 5 6 7 8 9 10
List&Person& list = new&List&Person&(); SqlDataReader sdr = new&SqlDataReader(); while&(sdr.Read()) { &&&&Person person = new&Person(); &&&&person.Name = sdr.GetString(0); &&&&//....下面类似 &&&&list.Add(person); } &&&
开始写的时候觉得是锻炼了,写的多了就觉得无聊了,其实完全可以换一种方式来实现上面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
public&static&List&T& ConvertData&T&(SqlDataReader sdr) &&&&&{ &&&&&&&&&List&T& list = new&List&T&(); &&&&&&&&&Type type = typeof(T); &&&&&&&&&PropertyInfo[] properties = type.GetProperties(); &&&&&&&&&while&(sdr.Read()) &&&&&&&&&{ &&&&&&&&&&&&&T model = Activator.CreateInstance&T&(); &&&&&&&&&&&&&for&(int&i = 0; i & properties.L i++) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&for&(int&j = 0; j & sdr.FieldC j++) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&//判断属性的名称和字段的名称是否相同 &&&&&&&&&&&&&&&&&&&&&if&(properties[i].Name == sdr.GetName(j)) &&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&Object value =sdr[j]; &&&&&&&&&&&&&&&&&&&&&&&&&//将字段的值赋值给User中的属性 &&&&&&&&&&&&&&&&&&&&&&&&&properties[i].SetValue(model, value, null); &&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&} &&&&&&&&&&&&&list.Add(model); &&&&&&&&&} &&&&&&&&&return& &&&&&}
List&User& list = new&List&User&(); SqlDataReader sdr = cmd.ExecuteReader(); list = ConvertData&User&(sdr);
3.案例三,ajax页面传递值可以使用get方式,或者post方式的传递JSON格式数据转换
 简单的转换一个get传递的字符串Name=xx&Age=xx,后台直接用一个字典去模拟了:
Dictionary&string, object& dic = new&Dictionary&string, object&(); dic.Add("Id",100); dic.Add("Name", "keso"); dic.Add("Group", "程序员");
 转换字典方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public&static&T ConvertDic&T&(Dictionary&string, object& dic) &&&&&&{ &&&&&&&&&&T model = Activator.CreateInstance&T&(); &&&&&&&&&&PropertyInfo[] modelPro = model.GetType().GetProperties(); &&&&&&&&&&if&(modelPro.Length & 0 && dic.Count() & 0) &&&&&&&&&&{ &&&&&&&&&&&&&&for&(int&i = 0; i & modelPro.L i++) &&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&if&(dic.ContainsKey(modelPro[i].Name)) &&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&modelPro[i].SetValue(model, dic[modelPro[i].Name], null); &&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&} &&&&&&&&&&} &&&&&&&&&&return& &&&&&&}
  最后的调用:
User user = ConvertDic&User&(dic);
改变一生命运:人工智能机器学习深度学习Python视频2018最新版
↓↓↓★★★☆☆冲刺80万年薪,扫码获得视频链接,入微信学习群↓↓↓★★★☆☆
马开东云搜索--为百万程序员,站长服务,关注Python,Java及Web框架,大数据Hadoop MR Hive Hbase Spark Storm,自然语言NLP,机器学习 K-means 朴素贝叶斯 SVM 随机森林等,推荐系统协同过滤,神经网络CNN RNN,深度学习TensorFlow,IT互联网,科技资讯,想你所想,知你不知,共享信息,改变世界!做个用代码改变世界的程序员,我喂自己袋盐.
来源:(***: 微信:makaidongzi QQ: 微信公众号:makaidong-com) &&&&&& 欢迎分享本文,转载请保留出处!新增的面板属性意味着什么?!知道这些让你玩转三界!
点这里?除了新时装坐骑,物理葫芦娃元神也投放了!?
今天又是版本的更新维护
听说有很多好玩好看的新内容上线了惹!
(点击查看→11.23版本维护公告)
什么?!你还是有点不清楚?!
贴心菌菌给你划重点
带你体验新内容!
马匹评分排行榜
新增马匹评分排行榜
小板凳已搬好
默默围观大神们的神马
你的马匹上榜了吗?~
官配傀儡外观功能
官配傀儡外观功能全服开放
通过官配傀儡的外观按钮可进入傀儡外观界面
商城时装自由添加
相关拓本支持制作
最高8格的傀儡衣橱空间任君任意装点!
美美哒落花配上美美哒梦言~
拍照功能更新
选择你喜欢的文字气泡样式
然后输入文字
感觉自己萌萌哒~
查看当前经验可升等级
经验条满时
可在角色界面查看当前经验可升等级
不用再拿着纸笔算来算去了
角色界面直接告诉你当前经验可升等级~
卡89的小伙伴再也不用担心
因数学不好和盲目自信
而遭遇升到101级的尴尬了
好友分组群发
编辑分组时支持按照好友分组接受群发
将好友分好组
也可以把消息定向群发哦~
你的秘密只能跟我说~
触发灵兽情窦初开
现在参与灵兽结婚
也有几率触发灵兽的情窦初开啦!
再也不用每天在世界频道问
有没有人结婚游街了...
主人!现在只要我往万兽林一站,
我就能懂点什么!
玩家属性面板新增属性
玩家属性面板新增以下属性:
物理减伤比例、法术减伤比例、
物理受伤减少、法术受伤减少、
水抗、忽视水抗、冰冻抗。
新属性登场!属性界面越来越完善咯!
这次有新增元素水抗和冰冻抗性,
莫非有新职业要上线了?
玩家排行榜新增属性
玩家排行榜新增两个属性:
物理减伤比例、法术减伤比例
又到了膜拜大佬的时候了!
大佬们的物理减伤比例再堆一下的话
菜刀菌就真的怎么砍都不掉血了...
嘻哈龙坐骑新增动作
嘻哈龙坐骑增加第二套待机动作,静待它的舞步吧!
去***组队的时候
小伙伴们都被我的龙帅到了!
银杏、枫树增加落叶效果,樱花、桃花增加落花效果。
是不是很浪漫!
(菌看到已经有精明的小伙伴在卖樱花了...)
菌的少女心都要溢出来了!
还有美腻的冬绿时装!
拉风的雪豹坐骑!
比如像这位大哥
(雪豹:斑点狗???)
那还不赶紧穿上新衣服、
骑着新坐骑去撩妹?!
全面了解【灵兽结婚玩法】
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点

参考资料

 

随机推荐