当前位置: 首页 > 知识库问答 >
问题:

抽象类将功能注入到它不了解的方法中

师成弘
2023-03-14
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();
    }
}
Hello from Foo
Hello from Bar
Hello from Foo
Another hello from Bar

这有可能吗?

共有1个答案

卢磊
2023-03-14

经过大量挖掘,我得出的结论是,这在普通的C#.NET中是不可能的。

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

PostSharp有一些方法可以实现我想要的功能(尽管这个工具是许可的,但它们确实有一个启用了这个功能的免费版本)。但是,它们确实有一些限制(更多的是C#的限制,而不是PostSharp的限制),所以我也不能按我想要的方式使用它。最后我做了一些更老派的事情。

 类似资料:
  • 为什么我从下面的代码中得到这个编译错误消息? (程序根据键盘上按下的箭头键,在4个方向上移动箭头:d) Direction.java:41:错误:DirectionBoard。DirectionListener不是抽象的,并且不会覆盖KeyListener中的抽象方法keyReleated(KeyEvent)

  • 我有一个问题是将EJB注入到抽象类中,抽象类是我JSF CDI bean的父类。在我的项目中,我使用MyFaces CODI 1.0.5(ViewScope),Omniface 1.3,PrimeFaces 3.4.2和GlassFish3.1.2。 应用程序是一个EAR,抽象类位于EJB模块中,JSF CDI bean位于WAR模块中: 我的抽象类: 我的CDIBean: 当我部署应用程序并访问

  • 本文向大家介绍php中的抽象方法和抽象类,包括了php中的抽象方法和抽象类的使用技巧和注意事项,需要的朋友参考一下 1、什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法。所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方法还要加一个关键字"abstract"来修饰。 例如: 2、什么是抽象类? 只要一个类里面

  • 问题内容: 假设我有两个类,A和B。A类定义为抽象类,而B扩展了这个抽象类,最后我测试了结果,两个类都属于同一包。 现在,当我测试它们时: 我得到预期的输出: 问题: 关键字的目的是什么,因为如果我省略它,它仍然可以正常工作。 如果我没有实现抽象方法,则会出现编译错误。那么与实现接口有什么区别? 另外,我也可以在B中实现。然后输出更改为B中的用法。这是否还会覆盖父类方法?那么在A类中将方法显式定义

  • 我有一个子类,它声明了我的抽象超类中的所有方法,但它仍然给我一个错误,说明我的类不是抽象的。我不知道为什么会抛出这个错误。 我得到的具体错误是 PhoneBookEntry.java: 1:错误:PhoneBookEntry不是抽象的,并且不会覆盖可比中的抽象方法compareTo(Object) 我的问题代码: 还有我的子类: