jjzjj

c# - sealed 关键字会影响编译器对强制转换的看法

我有一种情况想要解释编译器的行为。给出一些代码:interfaceIFoo{TGet();}classFooGetter:IFoo{publicintGet(){return42;}}以下编译并运行:staticclassFooGetterGetter{publicstaticIFooGet(){return(IFoo)newFooGetter();}}如果我们更改Foo的签名类并添加sealed关键词:sealedclassFooGetter:IFoo//etc然后我在以下行中收到编译器错误:return(IFoo)newFooGetter();属于:Cannotconverttyp

C# 列表<接口(interface)> : why you cannot do `List<IFoo> foo = new List<Bar>();`

如果您有一个接口(interface)IFoo和一个类Bar:IFoo,为什么可以执行以下操作:Listfoo=newList();foo.Add(newBar());但是你不能这样做:Listfoo=newList(); 最佳答案 随便看一眼,这似乎应该(就像啤酒应该是免费的一样)有效。然而,快速的健全性检查向我们展示了为什么它不能。请记住,以下代码不会编译。它旨在说明为什么不允许这样做,即使它看起来在某一点之前都没有问题。publicinterfaceIFoo{}publicclassBar:IFoo{}publicclassZ