有没有办法在方法中注入功能?假设你有一个继承自抽象类的类,抽象类是否可以在每个方法调用开始时做一些事情,而抽象类已经知道所有方法,并且没有继承类必须调用某些东西在每个方法开头的抽象类上?
也许通过一个例子来解释更容易。让我们说我有这些课程:
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
这甚至可能吗?
答案 0 :(得分:0)
经过大量的挖掘后,我得出的结论是,在香草C#.Net中这是不可能的。
这确实称为面向方面编程,正如@Jamiec所描述的那样。
PostSharp有方法可以完全按照我的意愿行事(尽管此工具已获得许可,但他们确实拥有启用此功能的免费版本)。但是,它们有一些限制(比PostSharp限制更C# limitation)所以我不能按照我想要的方式使用它。最后,我做了一些更老的事情。
此问题的未来访问者可以阅读有关AOP和Postsharp的信息,并确定这是否适合他们。