Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在C中重写方法时会出现这种奇怪的差异#_C#_Xamarin_Xamarin.ios - Fatal编程技术网

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

C# 为什么在C中重写方法时会出现这种奇怪的差异#,c#,xamarin,xamarin.ios,C#,Xamarin,Xamarin.ios,想看看是否有人知道为什么第一种方法会产生与第二种不同的效果?第一个使所谓的“轨道”变为50高,但第二个并没有改变任何东西 (一) (二) 代码不显示调用方方法对方法的返回值所做的操作TrackRectForBounds() 但是我假设对返回的GCRect-做了任何事情,这是不同的:方法1直接返回参数forBounds,而方法2返回从base.TrackRectForBounds()返回的值代码不显示调用方方法对方法的返回值所做的操作TrackRectForBounds() 但是我假设对返回的GC

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

(一)

(二)


代码不显示调用方方法对方法的返回值所做的操作
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; 
}