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