Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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语言中,在对象上避免新的是可能的还是可取的#_C# - Fatal编程技术网

C# 在C语言中,在对象上避免新的是可能的还是可取的#

C# 在C语言中,在对象上避免新的是可能的还是可取的#,c#,C#,我有一节课 public class AClass { private integer x,y,z; public AClass() { Initialize x,y,z; } public AClass RetB(integer x, AClass C) { AClass B; B = new AClass(); B = dosomething(x, C); retu

我有一节课

public class AClass
{
    private integer x,y,z;
    public AClass()
    {
        Initialize x,y,z;
    }
    public AClass RetB(integer x, AClass C)
    {
        AClass B;
        B = new AClass();
        B = dosomething(x, C);
        return B;
    }
}
如果我想使用RetB(y,C),我可以在main方法中执行如下操作:

AClass MyB;
MyB = new Aclass();
MyB = RetB(2, CC);
但是这种方法会调用构造函数两次,一次用于MyB,一次用于RetB。这对C#来说是自然的,还是有可能/需要避免


谢谢

返回新对象的静态方法是一种非常常见的模式。例如,它们在.NET库中用于各种
int.Parse
(通常用于解析)(以及大量其他内容)。正如您所说的,当直接使用构造函数的重载时,它们会被使用,而构造函数的重载不会准确地传输正在发生的事情

public class AClass
{
    private int x, y, z;

    public static readonly AClass Empty = new AClass();

    // So that you can't do a new AClass() outside of this class
    private AClass()
    {
    }

    public static AClass RetB(int x, AClass c)
    {
        AClass b;
        b = new AClass();
        b.x = x;

        if (c != null)
        {
            b.y = c.y;
            b.z = c.z;
        }
        return b;
    }
}
使用:

请注意,作为构造函数
private
,使用

AClass myC = new AClass(); // doesn't compile

不,这一点也不自然——如果你打算忽略它,为什么还要创建一个新的
AClass
实例呢?请注意,在新实例上执行的初始化不会影响当前类中的
x
y
z
的值。在这里很难看到你真正想要达到的目标…请用你想要达到的目标更新问题。您的代码的意图非常不清楚…请将
RetB
设置为静态。这是一种工厂方法,更有意义。有一种模式叫做对象池,是关于重用对象的。你没有这样做,而且很少使用它/我在.NET中使用过。Tim建议我将“RetB”设置为静态。Jon给我的印象是,我可以省略行“MyB=new Aclass();”。这是正确的吗?其中一种选择更可取吗?
AClass myC = new AClass(); // doesn't compile