小编Iva*_*mko的帖子

为什么 CanRead 和 CanWrite 在 C# 中为具有重写访问器的属性返回 false?

当尝试从派生属性获取属性访问器或使用 CanRead / CanWrite 时,出于某种原因,不考虑基本自动属性。

CanReadCanWrite仅基于派生类型返回值,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)

.net c# reflection system.reflection

5
推荐指数
1
解决办法
638
查看次数

如何在 TypeScript 中生成和操作 JavaScript ESTree AST?

有一个 ESTree 规范描述了 JavaScript AST 格式,该格式在多个库中用于 JS 代码转换(重构、转译、缩小等)。

是否有任何具有 API 的工具/库专注于从头开始(而不是从现有的 JS 代码)生成ESTree AST 并对其进行操作?最好在 TypeScript 中获得 ESTree 节点静态类型的优势。

javascript compiler-construction code-generation abstract-syntax-tree typescript

5
推荐指数
0
解决办法
858
查看次数