C#中反思的理由
发布时间:2020-12-15 06:50:14 所属栏目:百科 来源:网络整理
导读:我想知道C#代码中反思的适当性.例如,我编写了一个函数,它遍历给定源对象的属性,并创建一个指定类型的新实例,然后将具有相同名称的属性值从一个复制到另一个.我创建了这个,以将数据从一个自动生成的LINQ对象复制到另一个,以避免LINQ中的多个表缺少继承. 不过,
我想知道C#代码中反思的适当性.例如,我编写了一个函数,它遍历给定源对象的属性,并创建一个指定类型的新实例,然后将具有相同名称的属性值从一个复制到另一个.我创建了这个,以将数据从一个自动生成的LINQ对象复制到另一个,以避免LINQ中的多个表缺少继承.
不过,我不禁想到这样的代码真的是“欺骗”,而不是使用提供的语言结构来实现给定的结束,它允许你规避它们. 这种代码在多大程度上是可以接受的?有什么风险?这种方法的合法用途是什么? 解决方法
有时使用反射可能是一个黑客,但很多时候它只是最美妙的代码工具.
看看.Net属性网格 – 任何使用Visual Studio的人都会熟悉它.您可以将其指向任何对象,它将生成一个简单的属性编辑器.这使用反射,事实上VS的大部分工具箱都是. 看单元测试 – 它们通过反射加载(至少在NUnit和MSTest中). 反射允许来自静态语言的动态样式行为. 一个真正需要的是鸭子打字–C#编译器已经支持这一点:你可以先看看任何看起来像IEnumerable的东西,不管它是否实现了接口.您可以对任何具有名为Add的方法的类使用C#3集合语法. 在需要动态样式行为的地方使用反射 – 例如,您有一组对象,并且要检查每个对象的相同属性. 动态类型的风险是相似的 – 编译时间异常成为运行时间.你的代码不是“安全”,你必须做出相应的反应. .Net反射代码非常快,但不如显式调用那么快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |