反射备忘

反射应用实例
本文通过一个具体案例展示了如何使用.NET框架中的反射技术来获取并显示类及其成员上的自定义属性信息,特别是用于记录类及方法变更历史的自定义属性。

项目1

using System; using System.Collections.Generic; using System.Text; namespace SupportsWhatsNew { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)] public class LastModifiedAttribute : Attribute { private DateTime dateModified; private string changes; private string issues; public LastModifiedAttribute(string dateModified, string changes) { this.dateModified = DateTime.Parse(dateModified); this.changes = changes; } public DateTime DateModified { get { return dateModified; } } public string Changes { get { return changes; } } public string Issues { get { return issues; } set { issues = value; } } } [AttributeUsage(AttributeTargets.Assembly)] public class SupportsWhatsNewAttribute : Attribute { } }

项目2

using System; using System.Collections.Generic; using System.Text; using SupportsWhatsNew; [assembly: SupportsWhatsNew] namespace VectorClass { [LastModified("14 Feb 2007", "IEnumerable interface implemented" + "So Vector can now be treated as a collection" )] [LastModified("10 Feb 2007", "IFormattable interface implemented" + "So Vector now responds to format specifiers N and VE" )] class Vector { public double x, y, z; public Vector(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } [LastModified("14 Feb 2007", "Class created as part of collection support for Vector")] public string tostring(string format) { //if (format == null) return ToString(); } } }

项目3

using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Windows.Forms; using SupportsWhatsNew; using VectorClass; namespace chapter12 { class WhatsNewChecker { static StringBuilder outputText = new StringBuilder(1000); static DateTime backDateTo = new DateTime(2007, 2, 1); static void AddToMessage(string message) { outputText.Append("/n" + message); } static void WriteAttributeInfo(Attribute attrib) { LastModifiedAttribute lastModifiedAttrb = attrib as LastModifiedAttribute; if (lastModifiedAttrb == null) { return; } DateTime modifiedDate = lastModifiedAttrb.DateModified; if (modifiedDate < backDateTo) { return; } AddToMessage(" MODIFIED: " + modifiedDate.ToLongDateString() + ":"); AddToMessage(" " + lastModifiedAttrb.Changes); if (lastModifiedAttrb.Issues != null) { AddToMessage(" Outstanding issues:" + lastModifiedAttrb.Issues); } } static void DisplayTypeInfo(Assembly theAssembly, Type type) { if (!(type.IsClass))//只显示类 { return; } AddToMessage("/nclass" + type.Name); Attribute[] attribs = Attribute.GetCustomAttributes(type);//的到类上的自定义类attribute if (attribs.Length == 0) { AddToMessage("No changes to this class/n"); } else { foreach (Attribute attrib in attribs) { WriteAttributeInfo(attrib); } MethodInfo[] methods = type.GetMethods();//的道类中的所有方法描述集合 AddToMessage("CHANGES TO METHODS OF THIS CLASS:"); foreach (MethodInfo nextMethod in methods) { object[] attribs2 = nextMethod.GetCustomAttributes(typeof(LastModifiedAttribute), false);//得到定义在方法上的attribute类 if (attribs != null) { AddToMessage(nextMethod.ReturnType + " " + nextMethod.Name + "()"); foreach (Attribute nextAttrib in attribs2) { WriteAttributeInfo(nextAttrib); } } } } } static void Main() { Assembly theAssembly = Assembly.Load("VectorClass"); Attribute supportsAttribute = Attribute.GetCustomAttribute(theAssembly, typeof(SupportsWhatsNewAttribute)); string Name = theAssembly.FullName; AddToMessage("Assembly: " + Name); if (supportsAttribute == null) { AddToMessage("This assembly does not support WhatsNew attributes"); return; } else { AddToMessage("Defined Types:"); } Type[] types = theAssembly.GetTypes(); foreach (Type definedType in types) DisplayTypeInfo(theAssembly, definedType); MessageBox.Show(outputText.ToString(), "what/'s New since " + backDateTo.ToLongDateString()); Console.ReadLine(); } } }

一个展示反射应用的备忘程序。

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值