gpt4 book ai didi

c# - 对隐式类型的限制

转载 作者:太空狗 更新时间:2023-10-29 19:41:28 25 4
gpt4 key购买 nike

在他的书中,Jon Skeet 提到了隐式类型的 7 条限制。我需要澄清最后两个:

A.您希望变量具有的类型是初始化表达式的编译时类型。
B.初始化表达式不涉及被声明的变量。

本书按照发布的顺序涵盖 Material (C# 2 在 C# 3 之前)。此时尚未引入 C# 4,因此我假设 A 不引用 dynamic。那么,编译时类型何时会不同于初始化表达式的执行时类型?

至于B,初始化表达式什么时候可以涉及声明的变量?

最佳答案

关于 B,Henk 给出了一个完美的答案(编辑:现在已删除),尽管我发现 int x = x = 1; 编译很奇怪。 (我原以为 x 直到初始化程序之后才被视为已声明。哦,好吧。)他的回答是:

int x = x = 1;   // Compiles
var y = y = 2; // Does not compile

关于 A 和您关于编译时间类型何时与执行时间类型不匹配的问题,这是一个它们不同的示例:

var foo = fooFactory.GetFoo();

... 并且 fooFactory 上的该方法实现为 ...

public FooBase GetFoo() {
return new FooSubtype();
}

这里,foo 的类型是 FooBase(可以是接口(interface)、抽象类或未密封的具体类),并且(没有转换)只有它的特性可用。显然,FooSubtype 实现或继承自 FooBase。

foo 在运行时持有的类型可以在这里辨别,因为我展示了 GetFoo() 的实现,但它没有被编译器检查。事实上,实现甚至可能不可用(可能在另一个程序集中)或者它可能会有所不同(可能是虚拟的)。要确定 GetFoo() 的编译时类型,以及 foo 的编译时类型,只有方法声明是相关的。

关于c# - 对隐式类型的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com