当尝试从派生属性获取属性访问器或使用 CanRead / CanWrite 时,出于某种原因,不考虑基本自动属性。
CanRead并CanWrite仅基于派生类型返回值,GetMethod以及SetMethod没有包含来自基类型的方法。
但是,当从基类型编写代码访问器时,可以使用(这样我们可以仅使用派生类型中定义的 setter 读取覆盖的自动属性)。
这是作为单元测试编写的重现它的代码:
using System.Reflection;
using NUnit.Framework;
[TestFixture]
public class PropertiesReflectionTests
{
public class WithAutoProperty
{
public virtual object Property { get; set; }
}
public class OverridesOnlySetter : WithAutoProperty
{
public override object Property
{
set => base.Property = value;
}
}
private static readonly PropertyInfo Property = typeof(OverridesOnlySetter).GetProperty(nameof(OverridesOnlySetter.Property));
// This one is passing
[Test]
public void Property_ShouldBeReadable()
{
var overridesOnlySetter = new OverridesOnlySetter {Property …Run Code Online (Sandbox Code Playgroud) 有一个 ESTree 规范描述了 JavaScript AST 格式,该格式在多个库中用于 JS 代码转换(重构、转译、缩小等)。
是否有任何具有 API 的工具/库专注于从头开始(而不是从现有的 JS 代码)生成ESTree AST 并对其进行操作?最好在 TypeScript 中获得 ESTree 节点静态类型的优势。
javascript compiler-construction code-generation abstract-syntax-tree typescript