- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有人可以向我解释为什么下面的代码会输出它的作用吗?为什么第一个输出中的 T 是 String 而不是 Int32,为什么在下一个输出中是相反的情况?
这个拼图来自 interview with Eric Lippert
当我查看代码时,我真的不知道它是 Int32 还是 String:
public class A<T>
{
public class B : A<int>
{
public void M() { System.Console.WriteLine(typeof(T)); }
public class C : B { }
}
}
public class P
{
public static void Main()
{
(new A<string>.B()).M(); //Outputs System.String
(new A<string>.B.C()).M(); //Outputs System.Int32
Console.Read();
}
}
最佳答案
Can someone explain to me why the below code outputs what it does?
我会在这里简单地解释一下;可以找到更长的解释 here .
问题的症结在于确定 class C : B
中 B
的含义。考虑一个没有泛型的版本:(为简洁起见,我将省略 publics。)
class D { class E {} }
class J {
class E {}
class K : D {
E e; // Fully qualify this type
}
}
可以是 J.E
或 D.E
;是哪一个? C# 中解析名称时的规则是查看基类层次结构,只有在失败时才查看您的容器。 K已经继承了一个成员E,所以它不需要查看它的容器就可以发现它的容器有一个包含成员E。
但我们看到拼图具有相同的结构;它只是被泛型混淆了。我们可以将泛型视为模板,并将 A-of-string 和 A-of-int 的构造写为类:
class A_of_int
{
class B : A_of_int
{
void M() { Write("int"); }
class C : B { } // A_of_int.B
}
}
class A_of_string
{
class B : A_of_int
{
void M() { Write("string"); }
class C : B {} // still A_of_int.B
}
}
现在应该清楚为什么 A_of_string.B.M()
写成 string
而 A_of_string.B.C.M()
写成 int
.
关于c# - 来自 Eric Lippert 采访的谜题 : Inheritance and Generic Type Setting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41319962/
我只是在看 Eric Lippert 的 immutable binary tree 的简单实现,我对此有疑问。在展示了实现之后,Eric 表示 Note that another nice feat
昨天刚刚安装了 Ubuntu 16.04 LTS,安装了 Eric。工作正常。今天想启动 Eric 并使用 qtdesigner,但没有成功(出现错误 qtdesigner not found),因为
我正在使用 eric hynds 多选 下面是我使用的代码 data = $.parseJSON(data); try { $(
我正在使用 Eric Meyer 的 css reset 2。但是在我的网站中使用标题时,标题都是相同大小和小文本。我已经看到问题来自 css reset。我尝试从那里删除标题,但现在它们似乎从顶部开
我正在阅读Eric Lippert博客中有关C#5的新异步功能的出色article series。他在那里使用了一个从远程位置获取文档并将其存档到存储驱动器上的方法的示例。这是他使用的代码: asyn
这是一个如此简单的问题,但我无法找出答案。 我已经安装了适用于 Python 的 Eric 6 IDE。它有一个交互式控制台 - 太棒了!如何在控制台中执行选定的命令? PyCharm 具有 Shif
我是 jQuery 的初学者,我正在尝试让一个简单的 columnChooser 为 jqGrid 工作。我使用 jqGrid 的导航栏插入“添加/删除列”按钮,并在该按钮的单击事件上显示列选择器。之
我正在尝试更改 h1 元素的字体大小,但它似乎并没有覆盖重置的 CSS 文件。我有两次定义样式的运气,但这似乎不是最优雅的解决方案。谢谢。 /* http://meyerweb.com/eric/to
我想让这个挑战引起 stackoverflow 社区的注意。原始问题和答案是here .顺便说一句,如果你之前没有遵循它,你应该尝试阅读 Eric 的博客,这是纯粹的智慧。 总结: 编写一个接受非空
上周埃里克·尼布勒 tweeted std::is_function 的非常紧凑的实现特质类: #include template struct priority_tag : priority_ta
这个问题在这里已经有了答案: Race Condition with Static Class? (3 个答案) 关闭 7 年前。 这个谜题是在 NDC 2010 上展示的。那里有指向视频的链接,但
我正在学习构成 DDD 基础的书,并且在理解第 7 章中有关 cargo 的示例方面有点卡住了。 更具体地说,我有以下问题; Wat是“Delivery History”的真正目的?在我的理解中,它只
我无法理解这两个圆括号是什么意思? struct conf_method_st { const char *name; CONF *(*create) (CONF_METHOD *me
我使用 http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/ 的 JQuery UI 多选插件将元素动态附加到选择框 //Make
有人可以向我解释为什么下面的代码会输出它的作用吗?为什么第一个输出中的 T 是 String 而不是 Int32,为什么在下一个输出中是相反的情况? 这个拼图来自 interview with Eri
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicates: Why is it bad to use a iteration variable in a lambda
我知道并使用 eric meyer CSS reset,但是是否有更多的东西可以添加到 reset css 中?并且可以节省我们的时间并增加兼容性。 这是 default meyer 的最新 CSS
我想调整简单容器的高度,以匹配使用 $.ajax 从服务器返回的数据传递的不断变化的深度要求。 似乎一旦触发模态,所有 CSS 都会即时更改,例如$('#someid').css('高度','500p
我刚刚读了Eric Lippert's "Arrays considered somewhat harmful"文章。他告诉他的读者,他们“可能不应该返回一个数组作为公共(public)方法或属性的值
我刚刚读了 Eric Lippert 的这篇有趣的文章,Top 10 Worst C# Features .在接近尾声时他说: The rules for resolving names after
我是一名优秀的程序员,十分优秀!