propertyinfoC#,通过字符串获取控件以及给控件赋值

propertyinfo  时间:2021-06-08  阅读:()

判断某个事件发生为什么用lnetworkevents

btn.Click += new EventHandler(button2_Click); //获取Button类定义的所有事件的信息PropertyInfo pi = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic); //获取Button对象btn的事件处理程序列表EventHandlerList ehl = (EventHandlerList)pi.GetValue(btn, null);//获取Control类Click事件的字段信息FieldInfo fieldInfo = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic); //用获取的Click事件的字段信息,去匹配btn对象的事件处理程序列表,获取btn对象Click事件的委托对象 //事件使用委托定义的,C#中的委托时多播委托,可以绑定多个事件处理程序,当事件发生时,这些事件处理程序被依次执行

什么叫做反射,反射在编程中起什么作用?

反射可以让你动态的给程序增加功能。

比如,原来窗体上有一个文本框,在里面输入一个jpeg的图片文件名时。

程序可以把这个文件转换成bmp格式。

如果要增加读png文件并转换的功能,只需要在写一个dll。

程序就会根据你在文本框中的输入来决定是否调用这个新的dll来处理你的输入。

这个用反射做的话,原来的程序什么都不用动,只需要增加一个dll就可以了。

谁能给我讲一下C# PropertyInfo.GetValue()这个方法 里面的两个参数是什么意思?谢谢

obj 类型:System.Object 将返回其属性值的对象。

index 类型:System.Object() 索引化属性的可选索引值。

对于非索引化属性,此值应为 Nothing。

请问如何使用映射访问和修改运行时类的属性

在程序使用映射之前,需要理解几个基本概念,从运行时如何访问类动态属性开始。

如果没有使用过映射,这可能首先是个奇怪的概念。

你可能很想知道它能完成什么功能。

但是,只要你理解了它的功能并开始使用它,你会发现它不但使用方便,而且在每个应用程序中都有其用武之地。

很多开发人员都尝试使用简单的方法和封装好的程序模块,使用动态可重复利用的模块,可以节约很多时间和精力。

微软为开发人员提供了很好的方法完成这项工作,它是在某种情况下,通过使用PropertyInfo对象完成的。

获得PropertyInfo对象运行时访问数据属性时,必须使用PropertyInfo类。

一个PropertyInfo实例给出类的一个属性。

PropertyInfo对象描述了这种属性,并且在获得或设置属性值时,它成了代理服务器。

获得PropertyInfo对象的两个方法是:System.Type.GetProperty和System.Type.GetProperties。

GetProperty方法返回一个PropertyInfo对象,GetProperties方法返回PropertyInfo对象的数组。

下面是这两种方法基本例子:System.Type.GetPropertyC#:Figure ASystem.Type.GetPropertiesC#:Figure B 使用PropertyInfo对象一旦获得PropertyInfo对象,则可以找出其所涉及的属性信息。

下面列出了PropertyInfo对象中可以被访问的方法和属性属性:CanRead:如果属性包含可访问的GET存储器,则返回真值。

CanWrite:如果属性包含可访问的SET存储器,则返回真值。

Name:返回属性名称。

PropertyType:返回属性接受和返回的类型(Type)。

方法:GetValue:获得属性值(此时CanRead必须为真值)。

Example:Figure CSetValue:设置属性值(此时CanWrit必须为真值)。

Example:Figure DGetCustomAttributes:获得自定义属性数组。

使用上面的方法和属性,能够获得很多需要访问和修改的属性信息。

数据库 实体集和实体型的区别

机房收费系统大家想必不是做完,就是已经在手上了,在一开始做的时候就明确规定,我们必须用实体,而不能使Datatable,因为说是Datatable直接面向了数据库,当时不是很明白,于是也没有再深究,就去实现代码部分了,现在终于把三层的机房收费系统做完了,回过头再看的时候,有了那么一点小认识。

去年的时候,师哥师姐们用的是Datatable,也都实现了三层,在网上查了一些小Dome,也都是datatable ,于是我们就会发现这样真的有意义吗。

那么我们先来看看Datatable和Dataset吧。

在CSDN上,他说的是内存中的一张表,其实我们也可以直接把Datatable认定为数据库中查出来的表,比如你要查学生信息,那么学生信息表在电脑上就是我们说的Datatable。

而Dataset在CSDN中解释为 DataSet 是数据的一种内存驻留表示形式,无论它包含的数据来自什么数据源,都会提供一致的关系编程模型。

DataSet 表示整个数据集,其中包含对数据进行包含、排序和约束的表以及表间的关系。

那么我们把他理解成一个内存中的数据库吧,存放多个表的地方,也就是由多个Datatable的集合,一个小型数据库。

也就是说我们在层与层之间用的如果是Datatable,也就是数据库中的表,但是在我们三层的实现中,我们里边的结构其实只有UI层,BLL层,DAL层,Entity层,并没有要说到的Datatable的地位,知识我们在这样查询的时候方便罢了。

但是这样的话,我们的实体层貌似就没什么用了,尤其是查询的时候,我们的目的是查询东西,然后显示出来,可是如果显示的是Datatable,那么就把实体层架空了。

然后我们再说说实体Entity和List,单个实体如果比喻成一个学生的话,那么List就是好多的学生,但是前提是都是学生。

Entity是一维的,而datatable是二维的,如果大家不明白,那就把实体理解成一条线,而Datatable理解成一张表。

实体本身也就是一些对象的具体属性的集合。

把Datatable中列的属性一次在实体中体现出来。

那么为什么要这么做呢,为什么要把查到的结果再转化一下。

我们做系统的时候当然是往好的方面做,但是我们思考的时候却要往最坏的地方去考虑:这个系统不会一次做好的, 这个系统还是要改,这个系统我需要好多人来帮我,这个系统还不完善,当我们提出来这些“坏”的考虑时,我们就会发现,如果我们返回的是Datatable,要改?怎么改,我看不到Datatable里边的信息啊,完了,还得找数据库。

如果我需要别人帮我,完了,别人也不知道Datatable里边是什么,还得看数据库,如果以后我需要修改怎么办,时间长了呀,都忘了,还得找数据库。

那么大家是不是发现,只要是改动,那么我门需要的就是数据库,把核心数据都暴露了,这怎么可以,所以我们的前辈才发明了实体这么一个东西。

前边已经说过,我们为什么不用Datatable了,即使他在实现的时候是比较简单,但是我们还是要转化,现在我就展示一下他们是如何转化。

如果我们查询的是单条数据,那么就把Datatable转化到实体中。

dStudent为该次转化的实体 <span style="font-size:14px;"><span style="font-size:14px;"> '如果查询道德表的列数不为0,则把需要的查询到的列的数据传给student实体 If table.Rows.Count<> 0 Then dStudent.Student_No = table.Rows(0).Item("Student_No") dStudent.Student_Name =table.Rows(0).Item("Student_Name") dStudent.Sex = table.Rows(0).Item("Sex") dStudent.Department =table.Rows(0).Item("Department") dStudent.Grade =table.Rows(0).Item("Grade") dStudent.StuClass =table.Rows(0).Item("StuClass") dStudent.IsExist =table.Rows(0).Item("IsExist") dStudent.Charge =table.Rows(0).Item("Charge") dStudent.Card_ID =table.Rows(0).Item("Card_ID") End If '返回实体Student Return dStudent </span></span> 这样我们在以后的使用中,无论是修改,还是让别人来看,都是方便的很多。

而List的方法也是非常的方便,知识把Datatable里边的属性遍历了一边,然后在给List(T)中,当然首先添加一个方法,以后直接调用该方法,就成成功的转化。

<span style="font-size:14px;"><span style="font-size:14px;"> Public Shared Function convertToList(Of T As {New})(ByVal dt As DataTable) As IList(Of T) '将datatable转化为泛型集合 '注意:1,convertToList(Of T As {New}) 这里的new是用来约束T的,必须有,不然new T的时候会出现错误 '2,new约束在C#和VB.NET里面的写法是不一样的,C#里面用的是where来为T加上约束的 Dim myList As New List(Of T) '定义最终返回的集合 Dim myTpye As Type = GetType(T) '得到实体类的类型名 Dim dr As DataRow '定义行集 Dim tempName As String = String.Empty '定义一个临时变量 '遍历DataTable的所有数据行 For Each dr In dt.Rows Dim myT As New T '定义一个实体类的对象 Dim propertys() As PropertyInfo =myT.GetType().GetProperties() '定义属性集合 Dim Pr As PropertyInfo '遍历该对象的所有属性 For Each Pr In propertys tempName = Pr.Name '将属性名称赋值给临时变量 '检查DataTable是否包含此列(列名==对象的属性名) If(dt.Columns.Contains(tempName)) Then '将此属性与datatable里的列明比较,查看datatable是否包含此属性 '判断此属性是否有Setter If (Pr.CanWrite = False) Then '判断此属性是否可写,如果不可写,跳出本次循环 Continue For End If Dim value As Object =Trim(dr(tempName).ToString) '定义一个对象型的变量来保存列的值 If (value.ToString()<> DBNull.Value.ToString()) Then '如果非空,则赋给对象的属性 Pr.SetValue(myT, value,Nothing) '在运行期间,通过反射,动态的访问一个对象的属性 End If End If Next myList.Add(myT) '添加到集合 Next Return myList '返回实体集合 End Function</span></span> 实现的时候我们只需要加上一句 <span style="font-size:14px;"><span style="font-size:14px;">myList= EntityHelper.convertToList(Of Entity.CancelCardEntity)(table) Return myList</span></span> 实体,实体集,Datatable三者的比较,用好了,灵活性一定会得到很大的提高,那么以后的学习中,是不是也应该考虑一下,为什么要这么做,不这么做会怎么样。

C#,通过字符串获取控件以及给控件赋值

foreach(Control ctrl in this.Controls) { if(ctrl is Button) { Button btn=ctrl as Button; btn.Text="测试"; } } 窗体有Controls属性。

里面放的是自己所有子控件 当然如果你Button在窗体上的容器里,譬如Panel。

那么先按这个方法去找Panel,然后再找Button 谢谢。

Vultr再次发布充值多少送多少活动

昨天我们很多小伙伴们应该都有看到,包括有隔壁的一些博主们都有发布Vultr商家新的新用户注册福利活动。以前是有赠送100美元有效期30天的,这次改成有效期14天。早年才开始的时候有效期是60天的,这个是商家行为,主要还是吸引到我们后续的充值使用,毕竟他们的体验金赠送,在同类商家中算是比较大方的。昨天活动内容:重新调整Vultr新注册用户赠送100美元奖励金有效期14天今天早上群里的朋友告诉我,两年...

易速互联月付299元,美国独立服务器促销,加州地区,BGP直连线路,10G防御

易速互联怎么样?易速互联是国人老牌主机商家,至今已经成立9年,商家销售虚拟主机、VPS及独立服务器,目前商家针对美国加州萨克拉门托RH数据中心进行促销,线路采用BGP直连线路,自带10G防御,美国加州地区,100M带宽不限流量,月付299元起,有需要美国不限流量独立服务器的朋友可以看看。点击进入:易速互联官方网站美国独立服务器优惠套餐:RH数据中心位于美国加州、配置丰富性价比高、10G DDOS免...

JUSTG提供俄罗斯和南非CN2 GIA主机年$49.99美元JUSTGgia南非cn2南非CN2justG

JUSTG,这个主机商第二个接触到,之前是有介绍到有提供俄罗斯CN2 GIA VPS主机活动的,商家成立时间不久看信息是2020年,公司隶属于一家叫AFRICA CLOUD LIMITED的公司,提供的产品为基于KVM架构VPS主机,数据中心在非洲(南非)、俄罗斯(莫斯科),国内访问双向CN2,线路质量不错。有很多服务商实际上都是国人背景的,有的用英文、繁体搭建的冒充老外,这个服务商不清楚是不是真...

propertyinfo为你推荐
声纹识别声纹识别是啥意思网络审计网络安全审计系统的背景awv如何把普通电影转换成AWV印度尼西亚国家代码谁知道世界各国的国家电话代码?qq网络硬盘我QQ的网络硬盘怎么啦?微信智能机器人有一个人加我微信,他说他自己是图灵机器人,我想问一下这是啥软件怎么可以自动回复微信?腾讯贴吧QQ贴吧如何发帖红牛下架红牛下架事件怎么回事?美宜佳最近怎么买不到红牛了?软件开发技术文档软件开发文档重要吗?软件开发技术文档请问软件项目的技术开发文档都要写些什么呢,具体要求是什么呢,要写多少文档呢
万网虚拟主机 已备案域名注册 私服服务器租用 vps推荐 怎样申请域名 新秒杀 星星海 免费全能空间 阿里云浏览器 asp免费空间申请 169邮箱 电信虚拟主机 服务器监测 东莞服务器托管 qq金券 atom处理器 lamp什么意思 酸酸乳 阵亡将士纪念日 国内空间 更多