【问题标题】:Override method from instance of the class从类的实例重写方法
【发布时间】:2016-10-11 09:13:49
【问题描述】:

我有一个非常简单的问题,但似乎找不到答案,我想知道是否可以从实例类结构中覆盖方法如下所示:

public class A : baseA    
{
    public virtual void methodA()
    {
    }
}

public class B : baseB    
{
    public void method B()
    {
         var ClassA = new A();
    }

    /* Now Is there some sort of overide like */
    public override methodA()
    {
      //Do stuff
    }
}

并且这些类不会相互继承,这使其变得更加困难。 现在如果这种构造在 c# 中是可能的?

【问题讨论】:

  • 你不是从A继承的,那么你希望如何覆盖它?
  • 可以,你需要继承表单A并保留返回类型,在这种情况下void。你在代码中试过了吗?
  • 如果这就是您的要求,您不能只为变量 ClassA 覆盖 methodA()

标签: c#


【解决方案1】:

没有。如果你不继承一个类的行为,你就不能覆盖它。

需要 override 修饰符来扩展或修改继承方法、属性、索引器或事件的抽象或虚拟实现。

B 必须继承自类A 才能这样做。

public class A
{
    public virtual void methodA()
    {
    }
}

public class B : A
{
    public void methodB()
    {
        var ClassA = new A();
    }

    public override void methodA()
    {
        //Do stuff
    }
}

查看MSDN了解更多详情:

覆盖方法提供了从基类继承的成员的新实现。被覆盖声明覆盖的方法称为被覆盖的基方法。被覆盖的基方法必须与覆盖方法具有相同的签名

【讨论】:

  • @Wojciech Szabowicz - 这回答了你的问题吗?另外,如果您解释您要达到的目标,我们可能会以不同的方式为您提供帮助
  • 并且这些类不相互继承,使其更加困难,所以基本上你写的都是真的,但不是这个概念,我想使用策略模式。
  • @WojciechSzabowicz - 在不了解您所面临的实际问题的情况下无法提供任何反馈......
猜你喜欢
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 2021-08-28
  • 2015-06-10
相关资源
最近更新 更多