重写虚函数而不必实现另一个类

本文关键字:实现 另一个 不必 函数 重写 | 更新日期: 2023-09-27 18:10:59

我试图覆盖一个虚拟函数仅为一个定义的元素(而不必创建另一个类来实现它,然后添加一个函数来覆盖它…)。

的例子:

public class MyClass
{
    public virtual bool ChangeStatus(String status)
    {
        return false;
    }
}

void test()
{
    //The following is written as an example of what I am trying to achieve & does not work
    MyClass blah = new MyClass()
    {
        public override bool ChangeStatus(String status)
        {
            return true;
        }
    };
}

知道如何实现这一点吗?

谢谢。

重写虚函数而不必实现另一个类

如果你控制了MyClass,你可以让你想要的方法调用一个委托,这个委托可以在运行时为每个单独的对象替换…

class MyClass
{
    public void Func<SomeParameterType,SomeReturnType> myDelegate {get;set;}
    public SomeReturnType myFunction(SomeParameterType parameter)
    {
        if(myDelegate==null)
            throw new Exception();
        return myDelegate(parameter);
    }
}
...
MyClass obj = new MyClass();
SomeParameterType p = new SomeParameterType();
obj.myDelegate = (x)=>new SomeReturnType(x);
SomeReturnType result = obj.myFunction(p);

"virtual"answers"override"都与INHERITANCE有关。

1。虚方法可以重新定义。virtual关键字指定在派生类中重写的方法。我们可以在不修改程序其余部分的情况下添加派生类型。因此,对象的运行时类型决定了行为。

2。当您希望允许派生类重写基类的方法时,必须在基类方法中创建虚方法,并且必须在派生类方法中使用关键字override创建方法。

你不能没有inheriting the classoverride函数,virtual function的全部意义在于它可以在child class中成为overridden

如果你在同一个类中做这件事,你不会最终为这个类写一个简单的方法/函数吗?

因此,遵循面向对象编程的概念,它是为了简单而设计的&易于编程Instead simply inherit the class and override the function

c#严格地建立在类的概念之上。没有类就不能创建函数/方法。
另外,virtual/override意味着继承,所以你必须从这个类派生。