C# 为什么在C中重写方法时会出现这种奇怪的差异#
想看看是否有人知道为什么第一种方法会产生与第二种不同的效果?第一个使所谓的“轨道”变为50高,但第二个并没有改变任何东西 (一) (二)C# 为什么在C中重写方法时会出现这种奇怪的差异#,c#,xamarin,xamarin.ios,C#,Xamarin,Xamarin.ios,想看看是否有人知道为什么第一种方法会产生与第二种不同的效果?第一个使所谓的“轨道”变为50高,但第二个并没有改变任何东西 (一) (二) 代码不显示调用方方法对方法的返回值所做的操作TrackRectForBounds() 但是我假设对返回的GCRect-做了任何事情,这是不同的:方法1直接返回参数forBounds,而方法2返回从base.TrackRectForBounds()返回的值代码不显示调用方方法对方法的返回值所做的操作TrackRectForBounds() 但是我假设对返回的GC
代码不显示调用方方法对方法的返回值所做的操作
TrackRectForBounds()
但是我假设对返回的
GCRect
-做了任何事情,这是不同的:方法1直接返回参数forBounds
,而方法2返回从base.TrackRectForBounds()返回的值
代码不显示调用方方法对方法的返回值所做的操作TrackRectForBounds()
但是我假设对返回的GCRect
做了任何事情,这是不同的:方法1直接返回参数forBounds
,而方法2返回从base.TrackRectForBounds()
返回的值,如果您执行以下操作:
public override CGRect TrackRectForBounds(CoreGraphics.CGRect forBounds)
{
var baseReturnObj = base.TrackRectForBounds(new CGRect(forBounds.X, forBounds.Y, forBounds.Width, 50));
return forBounds;
}
并比较forBounds
和baseReturnObj
的对象,应该可以清楚地看出发生了什么。如果您这样做:
public override CGRect TrackRectForBounds(CoreGraphics.CGRect forBounds)
{
var baseReturnObj = base.TrackRectForBounds(new CGRect(forBounds.X, forBounds.Y, forBounds.Width, 50));
return forBounds;
}
然后比较
forBounds
和baseReturnObj
的对象,应该很清楚发生了什么。它们确实不同。为base.trackrectforbounds添加代码在第二种情况下,您不会返回对象,而只是返回其引用。而在第一种情况下,您让更改发生,然后返回obect。这完全取决于基类上定义返回的TrackRectForBounds
。我可以在iOS上找到一些关于这种方法的参考资料,但通常不会为iOS编写C#代码。如果您使用的是.NET以上的框架,可能需要添加一个标记。因为1返回您输入的任何内容,2返回基返回的任何内容。在1的情况下:只要基不修改输入(通过引用),您将得到您输入的任何内容。在第2种情况下:无论base决定对输入做什么(甚至完全忽略它),您都将得到base想要返回的任何内容。我们需要查看您正在重写的base方法的源代码。它们确实不同。添加base.trackrectforbounds的代码在第二种情况下,您不会返回对象,而只是返回其引用。而在第一种情况下,您让更改发生,然后返回obect。这完全取决于基类上定义返回的TrackRectForBounds
。我可以在iOS上找到一些关于这种方法的参考资料,但通常不会为iOS编写C#代码。如果您使用的是.NET以上的框架,可能需要添加一个标记。因为1返回您输入的任何内容,2返回基返回的任何内容。在1的情况下:只要基不修改输入(通过引用),您将得到您输入的任何内容。在2的例子中:无论base决定对输入做什么(甚至完全忽略它),您都将得到base想要返回的任何内容。我们需要查看您要重写的base方法的源代码
public override CGRect TrackRectForBounds(CoreGraphics.CGRect forBounds)
{
var baseReturnObj = base.TrackRectForBounds(new CGRect(forBounds.X, forBounds.Y, forBounds.Width, 50));
return forBounds;
}