- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MDBG 示例制作托管 .NET 调试器。
MDBG 示例仅在给定实例的顶级类上运行,而不是在类层次结构中深入搜索。我能够遍历层次结构并获得所有可用的方法。但是在这种情况下会出现问题:
public abstract class Base{
public Base() {SomeProp = "Base"}
public string SomeProp {get;set;}
}
public class A : Base{
public Base() {SomeProp = "A"}
public new string SomeProp {get;set;}
}
public static void Main(){
var a = new A();
var castedToBase = (Base)a;
//castedToBase.SomeProp -- expect result to be "Base" when debugging
}
问题是,当我将 castedToBase 作为 ICorDebugValue 并查询它的 ICorDebugValue2::GetExactType 时,我得到的是 A 类而不是 Base 类。那时我无法再区分要调用哪个方法 get_SomeProp 。我希望 ICorDebugValue2::GetExactType 考虑执行的转换,而不总是返回基础类型。
我如何了解应该调用哪个方法?
下面列出了我现在正在做的一些代码。 mdbgValue 表示 castedToBase 对象。 szTypedef 返回“A”而不是预期的“Base”
IMetadataImport importer;
var classToken = mdbgValue.CorValue.ExactType.Class.Token;
int size;
int ptkExtends;
TypeAttributes pdwTypeDefFlags;
importer.GetTypeDefProps(classToken,
null,
0,
out size,
out pdwTypeDefFlags,
out ptkExtends
);
StringBuilder szTypedef = new StringBuilder(size);
importer.GetTypeDefProps(classToken,
szTypedef,
szTypedef.Capacity,
out size,
out pdwTypeDefFlags,
out ptkExtends
);
最佳答案
将对象转换为它的基类不会改变对象的类型,只会改变它的感知方式。我建议您需要将“感知”类型与值一起传递,并使用它而不是实际类型来找到正确的方法。
“感知”类型是基于您从何处获取值的静态确定类型。
ICorDebugILFrame::GetArgument()
从参数中获取值,则从方法签名中提取相应的参数类型。
HasThis
标志但没有 ExplicitThis
标志,则改为从值中获取类型。ICorDebugILFrame::GetLocalVariable()
从本地获取值,则从方法本地签名中提取类型(本地签名的元数据 token 需要从方法 header 中提取.)ICorDebugEval
运行方法获得值(例如,属性 getter ),那么您应该使用您调用的方法的返回类型(也从方法签名中提取。) 关于c# - 多态类的函数求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38823879/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!