为什么这样:
@Override
protected void onPause() {
super.onPause();
stopVideo();
webview.pauseTimers();
}
@Override
public void onResume() {
super.onResume();
webview.resumeTimers();
webview.onResume();
}
private void stopVideo() {
try {
Class.forName("android.webkit.WebView")
.getMethod("onPause", (Class[]) null)
.invoke(webview, (Object[]) null);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
webview.loadUrl("about:blank");
webview.destroy();
webview = null;
}
结果
public class BoolClass
{
public bool Value { get; set; }
}
class Program
{
static void Main(string[] args)
{
BoolClass bc1 = new BoolClass { Value = false };
BoolClass bc2 = bc1;
bc1.Value = true;
}
}
由于bc2.Value == true
是我期望bool
的值类型,除非bc2.Value == false
被装箱并存储在堆上。
我在Stack Overflow上发现了这个方法来判断该值是否已装箱
bc2.Value
但它说它没有盒装。我现在有些困惑,有人能解释一下吗?
答案 0 :(得分:8)
BoolClass
中只有Main
的一个实例 - 使用
BoolClass bc1 = new BoolClass { Value = false }
第二个变量bc2
引用BoolClass
的完全相同的实例,以及附加到该实例的所有属性。这是因为不会复制引用类型。
因此,只有一个Value
属性,它属于BoolClass
实例。通过对实例的两次引用都可以看到对该属性的任何操作。
答案 1 :(得分:4)
因为您只创建了一个BoolClass实例(其中包含' new'的行)。分配bc2时,您将为其分配与bc1相同的对象引用,因此它们现在指向同一个对象。
因此,在分配bc1.Value时,您要在bc2上更改同一对象的布尔值,因此它也包含相同的值。
答案 2 :(得分:0)
您没有创建刚刚初始化现有的新实例,因此它引用了某个对象。
如果使用new
创建新的,则它将引用不同的object.Ex -
BoolClass bc1 = new BoolClass { Value = false };
BoolClass bc2 = new BoolClass();
bc2.Value = bc1.Value
bc1.Value = true;
现在bc2.Value
只会是假的
答案 3 :(得分:0)
因为您创建了BooClass的实例:
BoolClass bc1 = new BoolClass { Value = false };
然后影响此对象引用另一个对象引用bc2:
BoolClass bc2 = bc1;
因此,bc2和bc1现在指向相同的BooClass实例。