Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种方法可以同时创建多个(几乎相同的)对象?_C#_Winforms_Object_Optimization_Formatting - Fatal编程技术网

C# 有没有一种方法可以同时创建多个(几乎相同的)对象?

C# 有没有一种方法可以同时创建多个(几乎相同的)对象?,c#,winforms,object,optimization,formatting,C#,Winforms,Object,Optimization,Formatting,我为这个措辞拙劣的标题道歉,但我真的不太确定该怎么说。大约一小时前,我问了一个关于函数的类似问题,但这与对象的初始化有关,特别是在使用WinForms时。相关代码: // // textBoxCTotal // this.textBoxCTotal.Cursor = System.Windows.Forms.Cursors.Default; resources.ApplyResources(this.textBo

我为这个措辞拙劣的标题道歉,但我真的不太确定该怎么说。大约一小时前,我问了一个关于函数的类似问题,但这与对象的初始化有关,特别是在使用WinForms时。相关代码:

        // 
        // textBoxCTotal
        // 
        this.textBoxCTotal.Cursor = System.Windows.Forms.Cursors.Default;
        resources.ApplyResources(this.textBoxCTotal, "textBoxCTotal");
        this.textBoxCTotal.Name = "textBoxCTotal";
        this.textBoxCTotal.TabStop = false;

        // 
        // textBoxBTotal
        // 
        this.textBoxBTotal.Cursor = System.Windows.Forms.Cursors.Default;
        resources.ApplyResources(this.textBoxBTotal, "textBoxBTotal");
        this.textBoxBTotal.Name = "textBoxBTotal";
        this.textBoxBTotal.TabStop = false;

        // 
        // textBoxRTotal
        // 
        this.textBoxRTotal.Cursor = System.Windows.Forms.Cursors.Default;
        resources.ApplyResources(this.textBoxRTotal, "textBoxRTotal");
        this.textBoxRTotal.Name = "textBoxRTotal";
        this.textBoxRTotal.TabStop = false;
是否有可能一次初始化这3个对象(如果名称正确的话),从而将代码缩减近66%?我觉得必须有一种更紧凑的方式

我很高兴澄清任何措辞,因为我相信我可能没有尽可能清楚


谢谢。

当然有:这叫做“重构”:

您可以这样使用它:

 InitializeTextBox(this.textBoxBTotal, nameof(this.textBoxBTotal));

但是请注意,这是使用windows窗体设计器自动生成的代码。如果您编辑了该代码,则以后不可能通过编辑器进行更多更改。所以,在这种情况下,也许使用这种复制是可以的。

这是来自自动生成的设计器类的代码吗?正如SeM所怀疑的:如果这是设计器代码:不要碰它!如果您自己编写:您可以创建一个接受TextBox参数的函数,并执行如下所示的设置。然后将相应的文本框传递给该函数。它不会是“立刻”的,但你会大大减少代码重复。我想我之所以不想使用它,是因为:如果我在设计器中进行更改,它会重新生成以前存在的整个代码结构?或者干脆破坏设计师?没错。如果从设计器中更改自动生成的代码,您永远不知道会破坏什么。因此,为了获得更好的工具:别管它。但是在不同的环境中,如果没有涉及设计器,您当然可以(也应该)对其进行优化。在任何情况下都不要接触设计器生成的代码,尤其是使用
注释的方法不要使用代码编辑器修改此方法的内容。如果你这样做了,你会后悔的。旁注-你可以在方法中使用
nameof
,这样你就不必再传递文本框的名称了。@ZoharPeled-不,你不能-这将成为“textbox”,这不是OP想要的
nameof(textBox)
将是“textBox”。完全同意-除了方法名-在本例中InitialiseTextBox可能更清晰。
 InitializeTextBox(this.textBoxBTotal, nameof(this.textBoxBTotal));