我写了一段简单的代码来参与Afterthought,但是它不起作用,我也不知道为什么。它的很大一部分来自其他SO问题:How to implement simple Property Ammendment with Afterthought

using System;
using System.Collections.Generic;
using Afterthought;
namespace SecondAmendmentTest
{
    class Program
    {
        public class TestUser
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public bool HasChanged { get; set; }
            public void method()
            {
                Console.WriteLine("method");
            }
        }

        public class TestUserAmmendment<T> : Amendment<T, T> where T : TestUser
        {
            public TestUserAmmendment()
            {
                Properties
                    .AfterSet((instance, x, y, z, a) => instance.HasChanged = true);
                Methods.After(ExceptionMethod);
            }

            private object ExceptionMethod(T instance, string method, object[] parameters, object result)
            {
                throw new NotImplementedException();
            }
        }

        static void Main(string[] args)
        {
            TestUser tu = new TestUser();
            Console.WriteLine("Has changed: " + tu.HasChanged.ToString());
            Console.WriteLine("Performing changes...");
            tu.Id = 5;
            tu.FirstName = "name";
            tu.LastName = "lastname";
            Console.WriteLine("Has changed: " + tu.HasChanged.ToString());
            tu.method();
            Console.ReadKey();
        }
    }
}


它可以编译,但不对输出exe文件进行任何更改。我已经配置了构建后事件。构建输出:

1>------ Rebuild All started: Project: SecondAmendmentTest, Configuration: Debug Any CPU ------
1>  SecondAmendmentTest -> C:\Users\Lukasz\Documents\Visual Studio 11\Projects\SecondAmendmentTest\SecondAmendmentTest\bin\Debug\SecondAmendmentTest.exe
1>  Amending SecondAmendmentTest.exe (5,559 seconds)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========


最后在运行后从应用程序输出:

C:\Users\Lukasz\Documents\Visual Studio 11\Projects\SecondAmendmentTest\SecondAmendmentTest\bin\Debug>SecondAmendmentTest.exe
Has changed: False
Performing changes...
Has changed: False
method


没有修改HasChanged属性,也没有抛出NotImplementedException。我正在使用Git的最新消息。您有一些想法为什么它不起作用?

编辑:这是整个解决方案:SecondAmendmentTest.zip

最佳答案

我知道是一年后,但是:

为了建立在Willem van Ketwich的答案的基础上,Afterthought.NET中实际上存在一个错误(疏忽大意?),如果不修改其父类型,则不允许修改嵌套的类型。

我已经提交了pull request修复错误。

除了此修复程序之外,您仍需要在嵌套类上使用[Amendment(typeof(TestUserAmmendment<>))]来触发修订。

关于c# - 经过思考似乎不起作用,简单的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10606700/

10-11 02:04
查看更多