在C#中覆盖方法时为什么会出现这种奇怪的差异

时间:2015-09-24 09:30:28

标签: c# xamarin xamarin.ios

想检查是否有人知道为什么第一种方法会产生与第二种方法不同的效果?第一个使得所谓的“Track”变得高50,但第二个不会改变任何东西!

1)

public override CGRect TrackRectForBounds (CoreGraphics.CGRect forBounds)
{
    base.TrackRectForBounds (new CGRect (forBounds.X, forBounds.Y, forBounds.Width, 50));
    return forBounds;
}

2)

public override CGRect TrackRectForBounds (CoreGraphics.CGRect forBounds)
{
    return base.TrackRectForBounds (new CGRect (forBounds.X, forBounds.Y, forBounds.Width, 50));
}

2 个答案:

答案 0 :(得分:3)

代码没有显示调用方法对方法TrackRectForBounds()的返回值的作用。

但是我认为返回的GCRect完成了任何事情 - 并且有区别:方法1确实直接返回参数forBounds,而方法2返回从base.TrackRectForBounds()返回的值。 / p>

答案 1 :(得分:1)

如果你这样做:

public override CGRect TrackRectForBounds(CoreGraphics.CGRect forBounds) 
{ 
    var baseReturnObj = base.TrackRectForBounds(new CGRect(forBounds.X, forBounds.Y, forBounds.Width, 50));
    return forBounds; 
}

比较forBoundsbaseReturnObj的对象,应该明白发生了什么。