C#覆盖实例方法

所以基本上我有一个对象,它接受实例并将它们添加到列表中。 每个实例都使用虚拟方法,创建实例后我需要覆盖这些方法。 我将如何重写实例的方法?

你不能。 您只能在定义类时覆盖方法。

最好的选择是使用适当的Func委托作为占位符,并允许调用者以这种方式提供实现:

 public class SomeClass { public Func Method { get; set; } public void PrintSomething() { if(Method != null) Console.WriteLine(Method()); } } // Elsewhere in your application var instance = new SomeClass(); instance.Method = () => "Hello World!"; instance.PrintSomething(); // Prints "Hello World!" 

一旦创建了对象,C#就是静态的,你无法改变对象的行为。 您可以使用inhertance子类化超类,但这是在设计时完成的,而不是运行时。

 class foo { public virtual void dosomething() { console.writeline("this is foo"); } } class bar : foo { public override void dosomething() { console.writeline("this is bar"); } } var list = new Foo[]{new foo(), new bar()}; 

还有AOP的概念 – 面向方面的编程。 这是您可以在运行时开始注入行为的地方。 我知道有2个框架可以做到这一点

  1. 城堡动态代理
  2. Spring.Net

这在运行时是不可能的。 一旦实例化,您就无法更改类的行为。 但是,您可以考虑创建委托方法。

编辑,刚刚看到第一个答案,继续;)