当前位置:  开发笔记 > 编程语言 > 正文

C#反思的理由

如何解决《C#反思的理由》经验,为你挑选了1个好方法。

我想知道C#代码中反射的适当性.例如,我编写了一个函数,它迭代给定源对象的属性并创建指定类型的新实例,然后将具有相同名称的属性值从一个复制到另一个.我创建它来将数据从一个自动生成的LINQ对象复制到另一个,以避免LINQ中多个表的缺少继承.

但是,我不禁认为像这样的代码真的是"作弊",即不是使用提供的语言结构来实现给定的结束,它允许你绕过它们.

这种代码在多大程度上可以接受?有什么风险?这种方法的合法用途是什么?



1> Keith..:

有时候使用反射可能有点像黑客,但很多时候它只是最奇妙的代码工具.

查看.Net属性网格 - 任何使用Visual Studio的人都会熟悉它.您可以将它指向任何对象,它将生成一个简单的属性编辑器.这使用反射,事实上VS的大多数工具箱都有.

查看单元测试 - 它们是通过反射加载的(至少在NUnit和MSTest中).

Reflection允许静态语言的动态风格行为.

它真正需要的一件事是鸭子打字--C#编译器已经支持这个:你可以foreach看到任何东西IEnumerable,无论它是否实现了接口.您可以在任何具有调用方法的类上使用C#3集合语法Add.

在需要动态样式行为的任何地方使用反射 - 例如,您有一组对象,并且您希望在每个对象上检查相同的属性.

动态类型的风险类似 - 编译时异常变为运行时异常.您的代码不是"安全",您必须做出相应的反应.

.Net反射代码非常快,但没有显式调用那么快.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有