2016-10-11 122 views
-1

我有一个很好的简单问题,但似乎无法找到答案,我想知道它是否可能重写实例类structore的方法看起来像这样:从类的实例重写方法

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#中?

+6

您不从'A'继承,因此您如何期望重写它? –

+0

这是可能的,您需要继承A形式并保留返回类型,在这种情况下为'void'。你有没有在代码中试过它? –

+0

如果你正在问的是什么,你不能重写'methodA()'作为变量'ClassA'。 –

回答

4

不可以。如果您不从它继承,则无法覆盖类的行为。

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更多细节:

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

+0

@Wojciech Szabowicz - 这是否回答你的问题?另外,如果你解释你正在努力达到的目标,我们可以用不同的方式来帮助你。 –

+0

这些类别不会互相继承,使它变得更加困难,所以基本上你写的是真的,但不是在这个概念中,我尽管关于使用战略模式。 –

+0

@WojciechSzabowicz - 如果不了解您面临的实际问题,您无法给出任何反馈意见... –