反射可以用来实例化对象基类属性吗?像这样:publicclassremoteStatusCounts:RemoteStatus{publicintstatusCount;publicremoteStatusCounts(RemoteStatusr){Typet=r.GetType();foreach(PropertyInfopint.GetProperties()){this.property(p)=p.获取值();//示例伪代码}}}这个例子有点简单(它来自JiraAPI-RemoteStatus有4个属性),但想象一下基类有30个属性。我不想手动设置所有这些值,特别是如果我的继承类只有一些额外的属性。反思似乎暗示了答案。我看到在构造函数(publixX():y)中使用继承,我可以调用基类构造函数(我想?如果我错了请纠正我),但我的基类没有构造函数-它来源在jirawsdlpublicremoteStatusCounts(RemoteStatusr):base(r){//dostuff}编辑我可以想象2个可行的解决方案:上面概述的一个,以及某种关键字,如this.baseClass,它是type(baseclass)并这样做,作为对此的一种指示。因此,this.baseClass.name="Johnny"与this.name="Johnny"完全相同。出于所有意图和目的,我们假设基类具有复制构造函数-也就是说,这是有效代码:publicremoteStatusCounts(RemoteStatusr){RemoteStatusmBase=r;//dowork}edit2这个问题更像是一个思想练习而不是一个实际的练习——为了我的目的,我可以很容易地做到这一点:(假设我的“基类”可以被复制)publicclassremoteStatusCounts{publicintstatusCount;公共RemoteStatusrStatus;publicremoteStatusCounts(RemoteStatusr){rStatus=r;statusCount=getStatusCount();}}是的,你可以这样做——但要注意,你可能会遇到只有getter的属性,你必须单独处理这些属性。您可以使用Type.GetProperties(BindingsFlags)重载来过滤它。注意:您可能应该研究代码生成(T4是一个想法,因为它随VS2008/2010一起提供),因为反射可能会影响运行时,例如执行速度。通过代码生成,您可以轻松处理这项繁琐的工作,并且仍然拥有与手动输入相同的运行时间等。示例://某处的扩展方法publicstaticTCast(thisobjecto){return(T)o;}publicremoteStatusCounts(RemoteStatusr){TypetypeR=r.GetType();输入typeThis=this.GetType();foreach(PropertyInfopintypeR.GetProperties()){PropertyInfothisProperty=typeThis.GetProperty(p.Name);MethodInfocastMethod=typeof(ExMethods).GetMethod("Cast").MakeGenericMethod(p.PropertyType);varcastedObject=castMethod.Invoke(null,newobject[]{p.GetValue(r,null)});这个性质。SetValue(this,castedObject,null);}}试试AutoMapper。以上是C#学习教程:反射可以用来实例化对象基类属性吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
