实现类/方法的属性装饰继我最近关于大型复杂对象的问题作为Web服务的结果。我一直在思考如何确保所有未来的子类都可以序列化为XML。现在,显然我可以实现IXmlSerializable接口,然后读取它的读取器/写入器,但我想避免这种情况,因为这意味着我需要随时实例化读取器/写入器,而且99.99%的时间我会使用字符串,所以我可能会自己写。但是,要序列化为XML,我只需装饰类及其成员???属性(XmlRoot、XmlElement等)都很好。我打算将该方法返回到通用实用程序方法,所以我不需要担心类型等。我担心的是:如果我不使用必需的属性装饰类,则只会抛出错误运行。有没有办法强制属性装饰?可以用FxCop完成吗?(我还没有使用过FxCop)更新:很抱歉让这些家伙关掉,还有很多事情要做!绝对喜欢在测试用例中使用反射而不是求助于FxCop(喜欢将所有内容放在一起)的想法。FredrikKalseth的回答很棒,感谢您提供代码,因为它可能会让我深入了解自己怎么办!+1以获取对其他人的类似建议:)我编写了一个单元/集成测试来验证满足某些给定标准的任何类(即子类X)是否已得到适当装饰。如果将构建设置为与测试一起运行,则如果此测试失败,则构建可能会失败。更新:你说,“看起来我只需要卷起袖子确保单元测试被集体维护”-你不必这样做。只需编写一个通用测试类,它使用反射来查找所有需要声明的类。像这样:[TestClass]publicclassWhen_type_inherits_MyObject{privatereadonlyList_types=newList();publicWhen_type_inherits_MyObject(){//让我们找到所有直接或间接继承自MyObject的类型foreach(Typetypeintypeof(MyObject).Assembly.GetTypes()){if(type.IsClass&&typeof(MyObject).IsAssignableFrom(type)){_types.Add(类型);}}}[TestMethod]publicvoidProperties_have_XmlElement_attribute{foreach(Typetypein_types){foreach(PropertyInfopropertyintype.GetProperties()){object[]attribs=property.GetCustomAttributes(typeof(XmlElementAttribute),false);Assert.IsTrue(attribs.Count>0,"属性上缺少XmlElementAttribute"+property.Name+"intype"+type.FullName);}}}}你可以写一个单元测试来检查这种事情——它基本上使用了反射。考虑到这是可能的,我想我也可以写一个FxCop规则,但我从来没有做过这样的事情。您可以编写FxCop规则,甚至可以通过在基类的构造函数中调用GetType()并反映返回的类型来检查属性。一个好的FXCop规则(也是我现在需要的)是检查添加到ASP.NET会话的所有对象是否具有Serializable属性。我正在尝试从InProc会话状态转移到SQLServer。第一次请求页面时,我的站点对我来说崩溃了,因为不可序列化的对象存储在Session中。下一个任务是搜索所有源代码,寻找在会话中设置对象的每个实例……FXCop将是一个很好的解决方案。一些工作......您还可以使用这个概念/后处理器来强制属性之间的关系,并使用这样的日志在编译时强制类和属性之间的关系:http://www.st.informatik.tu-darmstadt。de/database/publications/data/cepa-mezini-gpce04.pdf?id=92以上就是C#学习教程的全部内容:实现class/method属性装饰共享,如果对大家有用需要了解一下C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
