使用reference(ref)作为相同基类(C#)的对象的参数

时间:2013-01-17 15:59:28

标签: c# reference subclass ref

是否可以将对象引用传递给共享相同基类的类的方法签名?即,简化:

public class ClassA : System.Web.UI.Control 
public class ClassB : System.Web.UI.Control

在Page:

private void SetCurrentView(ref Control ctrl)
{
  ctrl.Visible = true;
}

protected void Page_Load(object sender, System.EventArgs e)
{
  aClass = new ClassA();
  bClass = new ClassB();
  SetCurrentView(ref aClass);
  SetCurrentView(ref bClass);
}

显然,按原样,这不起作用,并且在方法调用中将其强制转换将不是可分配的引用。想法?

2 个答案:

答案 0 :(得分:4)

不,但无论如何你都不需要ref

要设置可见性,以下内容完全符合您的要求:

private void SetCurrentView(Control ctrl)
{
  ctrl.Visible = true;
}

答案 1 :(得分:1)

在您的情况下,您不需要使用ref。所有非值类型(char,int等)的内容都将作为引用传递:它表示该变量将指向同一对象的内存,因此它将影响同一个实例

不要将引用传递的概念与引用类型的概念混淆。这两个概念不尽相同。无论是值类型还是引用类型,都可以通过ref修改方法参数。通过引用传递时,没有值类型的装箱。

http://msdn.microsoft.com/en-us/library/14akc2c7.aspx