C#中是否像Java一样可以在对象声明中重写方法?

3

但是我已经在Java编程中了解到,你可以覆盖Object实例中的方法

        private MyObject myObject=new MyObject(){
             @Override
             public void myMethod(int args){
               .
               .
               .
             }
      }

有人能向我展示如何在C#中完成这个吗?谢谢。

2个回答

1

与Java不同的是,在C#中,所有实例方法都是虚拟的,你需要明确地使用virtual关键字:

   public class MyObject {
     ...
     // in order to be overriden in a derived class, base method should be 
     // explictly declared as virtual or abstract
     public virtual void myMethod(int args){
       ... 
     } 
     ...
   }

在C#中,override不仅是一个属性,也是一个关键字:

   // class can't be declared locally, but explictly
   public class MyOverridenObject: MyObject {
     ...
     // override is a mandatory keyword in the context
     public override void myMethod(int args){
       ... 
     } 
   }

最后,C#不允许在本地实现类,因此您必须明确声明类(在上面的代码中为MyOverridenObject),然后使用它:
   // Finally, you can assign an overriden class to the private field
   private MyObject myObject = new MyOverridenObject();

0
我知道你可以在Object的声明中覆盖方法。
这不是对象声明,而是类实例化。而且这个特性在C#中不存在。
因此,你只能在类声明中重写多态方法:
public class A 
{
    public virtual void DoStuff() {}
}

public class B : A 
{
    public override void DoStuff() {}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接