开发者

C# Calling an overriden method within the superclass

Hey there. I just picked up C# to learn game programming with XNA, but I also have some experience in Java.

Here's my code, in essence:

public class A
{
    public Rectangle getRectangle()
    {
        return [some rectangle];
    }

    public bool collision(A other)
    {
        Rectangle rect1 = getRectangle();
        Rectangle rect2 = other.getRectangle();
        return rect1.Intersects(rect2);
    }
}

public class B : A
{
    public Rectangle getRectangle()
    {
        return [some other rectangle];
    }
}

The problem arises when I try something like开发者_C百科 this:

A a;
B b;
if(a.collision(b))
    ...

Where B's version of get rectangle is never actually called, as far as I can tell. I tried a solution like the one suggested here but the message I get is basically "B.getRectangle() hides inherited member A.getRectangle(). Use the new keyword if this was intended."

I appreciate in advance any help I receive. I'm thinking my past java experience is getting in the way of understanding how C# is different. I guess if anyone just knows of a good link that explains the differences between C# and java or just how C# works in this respect that could suffice.

Cheers.


Unlike Java, methods in C# are not marked virtual by default. What your current code is doing is hiding the getRectangle method: there is an implicit new modifier on the declaration of the method in the derived class.

You need to explicitly include the virtual modifier in the method-declaration in the base class:

public virtual Rectangle getRectangle() { ... }

and override it in the derived class with:

public override Rectangle getRectangle() { ... }


You need to use the keyword override for the getRectangle method in class B like so:

public override Rectangle getRectangle()


I don't know Java, but I assume they have some sort of virtual/override syntax for methods?

  public class A
  {
    virtual public Rectangle getRectangle()
    {
      return [some rectangle];
    }

    public bool collision(A other)
    {
      Rectangle rect1 = getRectangle();
      Rectangle rect2 = other.getRectangle();
      return rect1.Intersects(rect2);
    }
  }

  public class B : A
  {
     override public Rectangle getRectangle()
     { 
        return [some other rectangle];
     }
   }


I would suggest use Override to change the functionality of getRectangle() in B.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜