Tag: 字段

使用Reflection确定哪些字段是属性的后备字段

我正在使用reflection来绘制对象。 这些对象在托管代码中,但除了通过reflection之外,我无法看到它们的源代码,底层结构等。 所有这一切的首要目标是一个对象的基本内存映射(类似于SOS.dll DumpObject和!ObjSize命令的function)。 因此,我试图确定哪些成员被“双重计算”为一个字段和一个属性。 例如: public class CalendarEntry { // private property private DateTime date { get; set;} // public field public string day = “DAY”; } 映射时显示: 字段 天 k__BackingField 属性 日期 像这样的一个类: public class CalendarEntry { // private field private DateTime date; // public field public string day = “DAY”; // Public […]

C#reflection:在成员字段上查找属性

我可能会错误地问这个问题,但是可以/如何在一个类中查找字段…例如…… public class HtmlPart { public void Render() { //this.GetType().GetCustomAttributes(typeof(OptionalAttribute), false); } } public class HtmlForm { private HtmlPart _FirstPart = new HtmlPart(); [Optional] //<– how do I find that? private HtmlPart _SecondPart = new HtmlPart(); } 或者我可能只是错误地执行此操作…如何调用方法然后检查应用于自身的属性? 另外,为了这个问题 – 我很好奇是否有可能在不知道/访问父类的情况下找到属性信息!

C#StructLayout / FieldOffset和数组索引

我在使用FieldOffset时遇到了一些问题。 下面的代码是一个例子,它对我不起作用: [StructLayout(LayoutKind.Explicit)] public struct IndexStruct { [FieldOffset(0)] public byte[] data; [FieldOffset(0)] public short[] idx16; [FieldOffset(0)] public int[] idx32; } 例如,如果我将名为“data”的数组设置为序列化字节数组,然后尝试使用“idx16”字段将数据检索为short,则索引仍然作为byte []对齐。 这意味着idx16 1获取数据中的第二个字节,而不是第二个16位字(字节2和3)。 如果我执行逆I索引短路而不是字节,这意味着偏移对齐是从源数据inheritance的。 我的问题是,有办法解决这个问题吗? 我知道我可以通过乘以元素的大小来补偿索引值,但还有另一种方法吗? 这是我在StackOverflow上找到的答案,但是当尝试该代码时,结果certificate它无法正常工作。 使用以下代码在VS中使用unit testing尝试使用它,但没有成功: [TestMethod()] public void SumTest() { float[] fArr = {2.0f, 0.5f, 0.0f, 1.0f}; MemoryStream ms = new MemoryStream(); for (int i = 0; i < fArr.Length; […]

在哪些情况下,将字段更改为属性是一个重大变化?

在阅读Jon Skeet关于字段与属性的文章时,他提到将字段更改为属性是一个重大变化。 我想了解这种变化可能导致中断的常见情况。 除了方案,如果可以,请提供任何详细信息。 首先,其他地方提到了以下几点: 如果在类上使用reflection,则无法将字段更改为属性。 即使我没有细节,这也很明显。 序列化是一种情况,其中reflection用于迭代对象,将字段更改为属性将破坏序列化程序或更改输出 您无法轻松绑定字段。 (这是为什么?我在这里阅读) ??? 编辑:罗伯特有一个全面的列表,列出了在字段上选择属性的原因,并解释了它们之间的切换如何导致突破性变化。

使用公共字段的最佳做法是什么?

当我写一个类时,我总是通过这样的公共属性公开私有字段: private int _MyField; public int MyField { get{return _MyField; } 什么时候可以公开这样的公共字段: public int MyField; 我正在创建一个名为Result的结构,我的意图是这样做: public Result(bool result, string message) { Result = result; Message = message; } public readonly int Result; public readonly int Message; 什么是最佳做法? 这样做好吗?