RednaxelaFX 发表于 2013-2-7 20:27:42

看到一个关于ref参数与多态的问题,记一下

刚才读到Alan McGovern的一帖,问为什么形式参数是ref A的地方不能把ref B作为实际参数传进去:
class A { }class B : A { }// ...public void Foo( ref A a ) {    // ...}public void Bar( ) {    B b = new B( );    Foo( ref b ); // error}
后面的回复很精辟的解答了这问题:如果把上面的Foo()实现成这样:
public void Foo( ref A a ) {    a = new A( );}
而同时允许传入ref b为参数的话,那就等于允许:
B b = new A();
这显然就不行了——在类型安全的前提下,派生类引用无法指向基类的实例。

虽然是个小地方,乍一下没看出来的话还是会觉得很困惑,是吧?
C#语言规范的10.5.1.2小节讲解了reference parameter,不过并没有提到variance的问题……hmm,或许该提个建议让他们加点解释?

==========================================================

更新:
<div class="quote_title">我 写道
页: [1]
查看完整版本: 看到一个关于ref参数与多态的问题,记一下