为什么传递一个
D2
的实例而不是将 d1
设置为 null
,会导致在 Foo
中出现错误?在 .NET 中建议使用 as
而不是 is
,因为 is
通常需要进行两次转换/转型,这比使用 null
测试更加昂贵。class Base {}
class D1 extends Base{}
class D2 extends Base{}
void Foo(Base d1OrD2) {
var d1 = d1OrD2 as D1;
if (d1 != null) print("it's d1");
else {
var d2 = d1OrD2 as D2;
if (d2 != null) print("it's d2");
}
}
void main() async{
Foo(D2()); // throws exception D2 is not an instance of D1.
Foo(D1()); // works
}