C#:_object_可以覆盖类的方法吗?

pis*_*hio 0 c# static-methods object

我有一个示例类:

class SampleClass
{
   public virtual string SomeProperty{get; set;}
   public virtual void SomeMethod() {
      // code
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以继承它并覆盖SomeProperty和SomeMethod,如下所示:

class ChildClass:SampleClass
{
   public override string SomeProperty{get; set;}
   public override void SomeMethod() {
      // code
   }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以覆盖一个对象,而不是一个类?喜欢

SampleClass sampleObject = new sampleObject();
Run Code Online (Sandbox Code Playgroud)

并且sampleObject.SomeMethod()是唯一的吗?谢谢.

Jon*_*eet 11

不,您不能基于每个对象覆盖.但是,如果要为不同的对象提供不同的行为模型,则始终可以将委托传递给构造函数:

public class ChildClass : SampleClass
{
   private readonly Action someMethodBehavior;

   public ChildClass(Action someMethodBehavior) {
       this.someMethodBehavior = someMethodBehavior;
   }

   public override void SomeMethod() {
      someMethodBehavior();
   }
}
Run Code Online (Sandbox Code Playgroud)

这允许每个对象有效地指定自己的行为.您甚至可以允许空委托引用表示"只执行默认操作",如果您希望它是一种选择性覆盖.

  • 大声笑乔恩,小心你的答案有多好.回答这样的问题就像给一个新手射击的双管霰弹枪!;-) (4认同)