首页新闻找找看学习计划

C#面向接口编程中遇到的怪事

0
悬赏园豆:10 [已关闭问题] 关闭于 2009-11-17 14:05

public interface IAbc
{
    int ID { get; set; }
}
public class CAbc : IAbc
{
    public int ID { get; set; }
}

public partial class Default : System.Web.UI.Page
{
    private void DoSome(ref IAbc abc)
    {
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        CAbc abc = new CAbc();
        this.DoSome(ref abc);//报错了,Argument '1': cannot convert from 'ref CAbc' to 'ref IAbc'
    }
}

大家来探讨一下,为什么

铃兰草的主页 铃兰草 | 初学一级 | 园豆:190
提问于:2009-11-16 17:20
< >
分享
所有回答(3)
0

CAbc abc = new CAbc();
abc本来就是引用类型,再加ref当然会报错

 

一滴血 | 园豆:1602 (小虾三级) | 2009-11-16 17:47
我已经试过去掉ref就能OK 但是,如果继承IAbc的是结构体呢?我怎么保证后续的调用
支持(0) 反对(0) 铃兰草 | 园豆:190 (初学一级) | 2009-11-16 18:20
结构体可以用ref,因为它是值类型.
支持(0) 反对(0) 一滴血 | 园豆:1602 (小虾三级) | 2009-11-17 09:14
那就重载一个一个DoSome方法处理ValueType
支持(0) 反对(0) Funeral | 园豆:175 (初学一级) | 2009-11-17 09:35
0

object类型

Mr雨 | 园豆:1199 (小虾三级) | 2009-11-17 09:36
0

protected void Page_Load(object sender, EventArgs e)
    {
        IAbc abc = new CAbc();//把CAbc改为 IAbc 就可以吧.
        this.DoSome(ref abc);

    }

振轩 | 园豆:325 (菜鸟二级) | 2009-11-17 10:40
我不能决定IAbc如何被实例化,这个做法是不可取的。 我用Funeral的方法重载了DoSome 结贴了吧
支持(0) 反对(0) 铃兰草 | 园豆:190 (初学一级) | 2009-11-17 14:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册