抽象类将功能注入到它不知道的方法中

时间:2015-06-16 11:00:07

标签: c# .net inheritance

有没有办法在方法中注入功能?假设你有一个继承自抽象类的类,抽象类是否可以在每个方法调用开始时做一些事情,而抽象类已经知道所有方法,并且没有继承类必须调用某些东西在每个方法开头的抽象类上?

也许通过一个例子来解释更容易。让我们说我有这些课程:

public abstract class Foo {
    SomeMagicStuff() {
        Console.WriteLine("Hello from Foo");
    }
}

public class Bar : Foo {
    public void Hello() {
        Console.WriteLine("Hello from Bar");
    }
    public void Hello2() {
        Console.WriteLine("Another hello from Bar");
    }

    public static void Main() {
        Hello();
        Hello2();
    }
}

有没有办法让Foo为Bar的所有方法注入一些功能,即使Foo不知道Bar的所有方法?对于这个例子,我想输出为:

Hello from Foo
Hello from Bar
Hello from Foo
Another hello from Bar

这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

经过大量的挖掘后,我得出的结论是,在香草C#.Net中这是不可能的。

这确实称为面向方面编程,正如@Jamiec所描述的那样。

PostSharp有方法可以完全按照我的意愿行事(尽管此工具已获得许可,但他们确实拥有启用此功能的免费版本)。但是,它们有一些限制(比PostSharp限制更C# limitation)所以我不能按照我想要的方式使用它。最后,我做了一些更老的事情。

此问题的未来访问者可以阅读有关AOP和Postsharp的信息,并确定这是否适合他们。