【发布时间】:2010-12-12 12:40:37
【问题描述】:
在 c# 中,我试图实现一种方法,我可以使用该方法将数据绑定到我传递给它的任何控件(当然,前提是该控件是从 databoundcontrol 对象派生的)
给定方法
public void CTLBindData(ref DataBoundControl ctl){ ... }
尝试将派生控件传递给函数时出现错误
比如下面的代码
DropDownList lister = new DropDownList();
CTLBindData(ref lister);
产生转换错误
好吧,我可以接受,但以下让我感到困惑(可能是因为我习惯于 c++ 而不是 c#)
CTLBindData(ref (DataBoundControl)lister);
在这种情况下,我得到了错误 "一个 ref 或 out 参数必须是一个可赋值的变量"
为了澄清,Dropdownlist 继承自列表控件,而列表控件继承自 DataBoundControl
这对我来说毫无意义,我应该能够传入任何从数据绑定控件派生的对象。似乎是显式类型转换导致了问题。
关于我做错了什么的任何线索?
直流
【问题讨论】:
-
@Andrew 的答案是正确的,但是,你确定它必须通过 ref 传递吗?从逻辑上讲,您可能会返回不同类型的不同对象。如果你不打算在 CTLBindData 中为它分配新对象,那么在有和没有 ref 的情况下传递它是没有区别的。
-
你是说c#默认将对象作为引用而不是值传递吗?对我来说,你可以取回一个不同的对象是不合逻辑的,除非引用比实际引用更接近指针。
-
使用
ref可以让不同的对象返回。如果您阅读了我的答案中的链接,它的解释比我们任何人在评论中的解释都要好。
标签: c# .net inheritance reference