Tag: reflection

是否可以在运行时获取类摘要?

是否可以在C#中在运行时获取类摘要? 我想通过reflection获取课程摘要,然后将其写入控制台。 通过类摘要我的意思是在类定义之前的摘要注释,如下所示: /// /// some description /// class SomeClass { } 我不知道在编译代码后这些注释是否可用,但如果它们可能有一种方法可以在代码中获取它们。 在此先感谢您的帮助。

检查类型是否支持使用.NET将隐式或显式类型转换为其他类型

想象一下,您已经获得了两个System.Type,并且您想确定是否存在从一个到另一个的隐式或显式类型转换。 如果没有专门检查静态方法,是否有内置方法来确定该类型是支持这些转换还是这些转换? 我知道这是一个简短的问题,但我认为这个场景相对容易解释,如果不是,请告诉我。 斯蒂芬,提前谢谢。

如何保护我的私有函数不受reflection执行的影响?

看到这个之后: 访问修饰符也会影响reflection吗? 我尝试使用它,但它不起作用: 如何防止reflection执行我的私有方法?

Assembly.CreateInstance和Activator.CreateInstance之间的区别?

这些电话有什么区别?

C#创建类的实例并按字符串中的名称设置属性

我有一些问题。 我想按名称创建类的实例。 我找到了Activator.CreateInstance http://msdn.microsoft.com/en-us/library/d133hta4.aspx并且它工作正常,我发现了这一点: 通过reflection设置一个属性也是一个字符串值 。 但是这两个怎么办呢? 我的意思是,我知道类的名称,我知道该类中的所有属性,我在字符串中有这个。 例如: string name = “MyClass”; string property = “PropertyInMyClass”; 如何创建实例并为属性设置一些值?

使用reflection来查找实现的接口

我有以下情况: public interface IPerson { .. } public class Person : IPerson { .. } public class User : Person { .. } 现在; 如果我有一个“用户”对象 – 我如何检查这是否使用reflection实现IPerson? 更确切地说,我有一个可能具有属性SomeUser的对象,它应该是某种类型,实现接口“IPerson”。 在我的情况下,我实际上有一个用户,但这是我想通过反思检查。 我无法弄清楚如何检查属性类型,因为它是一个“用户”,但我想检查它是否实现了IPerson ……: var control = _container.Resolve(objType); // objType is User here var prop = viewType.GetProperty(“SomeUser”); if ((prop != null) && (prop.PropertyType is IPerson)) { .. } […]

如何通过reflection在单个调用中获取字段和属性?

如果在某处覆盖,我道歉。 我在发布前做过研究! 好吧,所以问题……我正在使用GetType()。GetProperties,但是它没有返回简单的实例字段,它们没有get / set …所以我使用.GetFields找到它们,但我希望得到一个简单的单个对象来获取/设置一个值而不在字段和属性之间翻转……这可能吗? 我当前的代码适用于PropertyInfo,它工作得很好,但那不是我认为的字段吗? [编辑] 这是我提出的解决方案,这是很好的。 感谢大家…. // some logic borrowed from James Newton-King, http://www.newtonsoft.com public static void SetValue(this MemberInfo member, object property, object value) { if (member.MemberType == MemberTypes.Property) ((PropertyInfo)member).SetValue(property, value, null); else if (member.MemberType == MemberTypes.Field) ((FieldInfo)member).SetValue(property, value); else throw new Exception(“Property must be of type FieldInfo or PropertyInfo”); } […]

通过反映COM对象获取属性名称

如何通过在C#中反映COM对象来读出所有属性名称? 如果我知道名字,我知道如何获得财产。 comObject.GetType().InvokeMember(“PropertyName”, System.Reflection.BindingFlags.GetProperty, null, comObject, null); 但什么时候我想转储所有属性? PropertyInfo[] properties = t.GetProperties(); 这种方式不适用于Com-Objects。 如果我做一个GetMembers()我得到这些成员: Name: GetLifetimeService Name: InitializeLifetimeService Name: CreateObjRef Name: ToString Name: Equals Name: GetHashCode Name: GetType 对克里斯说

`Type.GetProperties`属性顺序

精简版 Type.GetProperties的MSDN文档声明它返回的集合不保证按字母顺序或声明顺序,但运行简单测试表明通常它以声明顺序返回。 是否有特定情况,您知道不是这种情况? 除此之外,建议的替代方案是什么? 详细版本 我意识到Type.GetProperties的MSDN文档说明: GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序。 您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。 因此无法保证方法返回的集合将以任何特定方式进行排序。 根据一些测试,我发现相反的返回属性按照它们在类型中定义的顺序出现。 例: class Simple { public int FieldB { get; set; } public string FieldA { get; set; } public byte FieldC { get; set; } } class Program { static void Main(string[] args) { Console.WriteLine(“Simple Properties:”); foreach (var propInfo in typeof(Simple).GetProperties()) Console.WriteLine(“\t{0}”, propInfo.Name); } } […]

寻找一种快速简便的方法来合并POCO上的所有属性

我有一些简单的类,有一堆简单的属性(简单的{get; set;}声明)。 所有属性都可以为空(或等效地,引用类型)。 例如: class POCO { int? Field1 { get; set; } string Field2 { get; set; } … etc … } 我有一个场景,我正在逐步构建这些POCO,最后我想让其中一个包含所有非空字段。 一些说明性代码: POCO o1 = LoadFields1To3(); POCO o2 = LoadFields4To5(); POCO o3 = LoadFields6To9(); … etc … 我们在这种情况下是因为某些字段是从SQL加载的(有时是不同的查询),而有些是从内存数据结构中加载的。 我在这里重新使用POCO类型来避免一堆无意义的类(静态类型对于Dapper来说非常有用,而且一般来说)。 我正在寻找的是将这些对象的属性合并为具有非null属性的单个属性的好方法。 就像是: POCO final = o1.UnionProperties(o2).UnionProperties(o3) // and so on 我能够保证在多个对象上没有字段为非null。 虽然我假设一个解决方案会采用最左边的非空字段,但实际上并不是必需的。 我知道我可以写一些reflection代码来做到这一点,但它有点讨厌和缓慢。 […]