我不明白为什么以下行为完全按照它的方式行事.我甚至不知道它是由隐藏还是其他原因造成的.
class A<T>
{
public class B : A<int>
{
public void b()
{
Console.WriteLine(typeof(T).ToString());
}
public class C : B
{
public void c()
{
Console.WriteLine(typeof(T).ToString());
}
}
public class D : A<T>.B
{
public void d()
{
Console.WriteLine(typeof(T).ToString());
}
}
}
}
class Program
{
static void Main(string[] args)
{
A<string>.B.C c = new A<string>.B.C();
A<string>.B.D d = new A<string>.B.D();
c.c();
c.b();
d.d();
d.b();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:
为什么在c.c()生成时c.b()生成System.String System.Int32?
为什么d.d()和d.b() …
在6.1.6.在C#语言规范中,有:
隐式引用转换是:
(...)
从任何引用类型到引用类型T,如果它具有隐式标识或引用转换为引用类型T0并且T0具有到T的标识转换.
他们为什么不相反,更简单地说:
从任何引用类型到引用类型T,如果它具有隐式标识或引用转换为T.
有什么事实上的区别吗?
编辑:我意识到我错误地输入了规范,错误可能对问题很重要(规范说"隐式引用转换是"而不是"存在隐式转换")
在这段代码中,我引用了局部变量,b即使它超出了范围.但我是从同一个函数中做到的,所以它可能仍在堆栈中,对吧?我运行程序并且它工作但我想知道它是否可以保证在所有实现上工作.
#include <iostream>
void main()
{
int* a;
{
int b = 5;
a = &b;
}
std::cout << *a;
}
Run Code Online (Sandbox Code Playgroud) 我有 Google Chrome 的 Tampermonkey 的用户脚本。目前,它使用 HTML5 本地存储来保存其数据,但我希望这些数据在登录用户使用的所有计算机上同步。
该GM_setValue功能仅将数据保存到本地磁盘,而该数据不会同步到其他计算机。
我不需要与 Firefox 兼容。
是否有可能做到这一点?
我有这个代码:
ArrayList<Detector> detectors;
detectors.stream().anyMatch(d -> d.detectRead(impendingInstruction, fieldName));
Run Code Online (Sandbox Code Playgroud)
但我还要保证:
true,评估立即停止这总是如此,或者如果不是,至少对于所有常见的JDK实现是否都是如此?
我在 C# 中有一个 [Serializable] 类,它有很多字段,每个字段都有一个不同的类。我使用序列化来保存/加载此类的实例,但我经常忘记在某处添加 [Serializable] 属性,并且只在运行时学习它。可以在编译时检查吗?
例如,这段代码,
[Serializable]
class House {
List<Room> Rooms;
}
class Room
{
}
Run Code Online (Sandbox Code Playgroud)
不应通过验证,因为 Room 类不可序列化。
以下代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>A</title>
<script type="text/javascript" src="./script.js" />
<script type="text/javascript">alert("This is skipped.");</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
通过W3C的验证测试,Chrome在此页面上不显示任何Javascript错误.但是,整个文本<script type="text/javascript">alert("This is skipped.");不会被Javascript引擎解析,它只是查找</script>标记,即使它是自我关闭的.但是,加载了文件"script.js".
在Chrome,Firefox和IE 11中,这会导致同样的行为.
为什么是这样?这里到底发生了什么?
c# ×3
javascript ×2
.net ×1
c++ ×1
compile-time ×1
generics ×1
html ×1
java ×1
java-stream ×1
pointers ×1
scope ×1
tampermonkey ×1
typeof ×1
xhtml ×1