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

使用reference(ref)作为相同基类(C#)的对象的参数,c#,reference,subclass,ref,C#,Reference,Subclass,Ref,对于共享相同基类的类,是否可以传入对方法签名的对象引用?i、 e.简化: public class ClassA : System.Web.UI.Control public class ClassB : System.Web.UI.Control 第页: private void SetCurrentView(ref Control ctrl) { ctrl.Visible = true; } protected void Page_Load(object sender, Syste

对于共享相同基类的类,是否可以传入对方法签名的对象引用?i、 e.简化:

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

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);
}

显然,照目前的情况,这不起作用,在方法调用中强制转换它将不是一个可分配的引用。想法?

没有,但无论如何,您不需要
ref

要设置可见性,以下操作正是您所需要的:

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

不需要,但您不需要在此处使用
ref

要设置可见性,以下操作正是您所需要的:

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

在您的情况下,不需要使用
ref
。所有非值类型(
char、int
等)的内容都将作为引用传递:这意味着变量将指向内存中的同一对象,从而影响同一实例

不要混淆引用传递的概念和引用类型的概念。这两个概念不一样。方法参数可以由ref修改,而不管它是值类型还是引用类型。通过引用传递值类型时,不存在值类型的装箱


在您的案例中不需要使用
ref
。所有非值类型(
char、int
等)的内容都将作为引用传递:这意味着变量将指向内存中的同一对象,从而影响同一实例

不要混淆引用传递的概念和引用类型的概念。这两个概念不一样。方法参数可以由ref修改,而不管它是值类型还是引用类型。通过引用传递值类型时,不存在值类型的装箱


你试过了吗?有一种简单的方法可以检查。请尝试执行简化的示例。我怀疑您误解了
ref
的目的。请阅读谢谢大家。是的,我尝试了指定的解决方案(总是在问之前做),这抛出了一个设计错误,地址是不可分配的(有道理)。@Jon Skeet-谢谢你的文章。这绝对是很有帮助和感激的。你有没有试过看看会发生什么?有一个简单的方法来检查它。请尝试执行简化的示例。我怀疑您误解了
ref
的目的。请阅读谢谢大家。是的,我尝试了指定的解决方案(总是在问之前做),这抛出了一个设计错误,地址是不可分配的(有道理)。@Jon Skeet-谢谢你的文章。这绝对是非常有帮助和感激的。非常感谢你,这绝对有助于摆脱蜘蛛网!第二段的第一句话击中了我的头,把我脑子里的一切都唤醒了。非常感谢你,这绝对有助于我把蜘蛛网弄出来!第二段的第一句话击中了我的头,唤醒了我脑海中的一切。