【问题标题】:How to override a method Inside another method using c#如何使用 c# 在另一个方法中覆盖一个方法
【发布时间】:2013-04-11 04:02:16
【问题描述】:

我是 C# 新手,我需要弄清楚如何在不实现继承的情况下覆盖新类方法中的类方法,在 Java 中我可以这样做:

Class classA{
  void method1(){
       statements ....
       ....
       classB obj = new classBb(){
            @override
            void someMethod(){ //from ClassB
              statements ....
              ....
            }
       };  
   }
}

我想在 C# 中实现同样的效果。

【问题讨论】:

  • 据我所知 - 这在 .NET 中是不可能的。
  • @MarcinJuraszek 谢谢

标签: c# inheritance methods overriding


【解决方案1】:

你不能在 C# 中做到这一点。如果实现的某些部分是特定于调用站点的,那么您可以使用 delegatevoid method2() 签名映射到Action(无参数/返回值),所以:

class classB {
    private readonly Action method2;
    public classB(Action method2) {
        if(method2==null) throw new ArgumentNullException("method2");
        this.method2 = method2;
    }
    public void SomeMethod() {
         ... that uses what was method2()
        method2();
    }
}

然后:

classB obj = new classB(() => {
   // statements...
});

使用替代相同的语法:

classB obj = new classB(delegate {
   // statements...
});

或:

classB obj = new classB(delegate() {
   // statements...
});

【讨论】:

  • 感谢@Marc Gravell,但不是将匿名方法传递给 ClassB 构造函数并在 SomeMethod() 中调用它,我们可以在 SomMethod() 块中创建一个匿名方法..!
  • @Kaviraj 是的,但这违背了目的;这里的重点似乎是该实现特定于classA.method1 的调用站点;将实现放在SomeMethod() 中是不允许的——除非你的意思是“我们可以将委托参数传递给SomeMethod”,那么可以肯定;但我无法评论这是否合适,因为您没有显示调用 SomeMethod() 的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 2013-02-22
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多