构造对象而不引用?

时间:2012-09-06 12:36:45

标签: c# reference

我几乎可以肯定这违反了C#的基本规律,但是可以通过引用来构建项目的“数组”或“集合”吗?

如果失败了,还有其他方法可以在参数化的静态方法中构建复选框吗?

希望我的伪代码有意义(关于Construct2的一切)

CheckBox cb = null, cb2 = null;

Main()
{
    Construct(ref cb);//works
    Construct2(new []{ref cb, ref cb2});//isnt going to work!
}

static void Construct(ref CheckBox cb){
    cb = new CheckBox();//works
}

static void Construct2(CheckBox[] cbs) { //
    cbs[0] = new CheckBox();
    cbs[1] = new CheckBox();
    //for (int i = 0; i < cbs.Length;i++){
    //    cbs[i] = new CheckBox();
    //}
}

3 个答案:

答案 0 :(得分:3)

你不能传递像这样的ref个变量数组。如果你想能够构建“into”多个变量,我认为你需要传递某种类型的setter:

void Construct2 (params Action<Checkbox>[] cbas)
{
    foreach (var cba in cbas) cba(new Checkbox());
}

Construct2(
    (c) => cb = c,
    (c) => cb2 = c);

答案 1 :(得分:1)

  

如果失败了,还有其他方法可以在参数化的静态方法中构建复选框吗?

是的,让方法返回一个复选框数组,而不是尝试传入引用。

static CheckBox[] Construct2()
{
    //....
}

答案 2 :(得分:1)

我不相信这在C#中是可行的。为了使用指针,您必须在unsafe上下文中声明代码,并使用/unsafe编译应用程序。但是,这只适用于诸如结构的值类型,并且不适用于托管对象(Checkbox以及您可能使用的大多数内容)。