对于我的问题,我应该在什么时候,在哪里以及如何创建一个类的对象。比如SomethingClass中的SomeOtherClass对象。
哪种方法是最好的,为什么?例如,我有一个类
public class SomethingClass()
{
SomeOtherClass obj;
public SomethingClass()
{
obj = null;
}
public void methodOne()
{
obj = new SomeOtherClass();
obj.someOtherClassMethodOne();
}
public void methodTwo()
{
obj = new SomeOtherClass();
obj.someOtherClassMethodTwo();
}
}
或者我应该这样做?
public class SomethingClass()
{
SomeOtherClass obj;
public SomethingClass()
{
obj = new SomeOtherClass();
}
public methodOne()
{
obj.someOtherClassMethodOne();
//use object here
}
public methodTwo()
{
obj.someOtherClassMethodTwo();
//use object here
}
}
如果同时有10个用户访问同一个类,那么“性能透视图”会发生什么?或者只有一个。哪一个更好。任何有帮助的材料都会很好。有没有更好的解决方案?
发布于 2018-06-05 05:02:46
这完全取决于你想要做什么。如果你的目标是在一个类中创建另一个类的实例,那么我的方法如下:
class Program
{
static void Main(string[] args)
{
SomethingClass somethingClass = new SomethingClass();
somethingClass.PrintThisText("HEY THERE");
//even though I'm calling .`PrintThisText` method here, this method will in turn call the `PrintText` method in `SomeOtherClass`
}
}
public class SomethingClass
{
readonly SomeOtherClass _someOtherClass;
public SomethingClass ()
{
this._someOtherClass = new SomeOtherClass();
}
public void PrintThisText(string text)
{
this._someOtherClass.printText(text);
}
}
public class SomeOtherClass
{
public void printText (string text)
{
Console.WriteLine(text);
}
}
下面是一个使用Interface的示例(可能需要考虑这个)
class Program
{
static void Main(string[] args)
{
SomethingClass somethingClass = new SomethingClass(new SomeOtherClass());
somethingClass.doSomething("HEY THERE");
}
}
public class SomethingClass
{
DoStuff _doStuff;
public SomethingClass(DoStuff doStuff)
{
this._doStuff = doStuff;
}
public void doSomething(string stuff)
{
_doStuff.PrintText(stuff);
}
}
public class SomeOtherClass : DoStuff
{
public void PrintText(string text)
{
Console.WriteLine("HEY THERE");
}
}
public interface DoStuff
{
void PrintText(string text);
}
发布于 2018-06-05 04:57:23
正如已经说过的,它在很大程度上取决于用例。如果所有这些类都很简单,并且内部没有任何资源消耗机制,那么在大多数情况下,这两个示例之间的性能差异应该可以忽略不计。
然而,不可忽视的是,将来更改和维护您的代码会有多难。第一种情况是一个很好的例子,说明如何不这样做,因为现在您必须记住在每个方法中使用new SomeOtherClass()
,最终,您将忘记这样做,从而导致空引用异常。通常,构造函数以完全有效的状态返回类的实例是一种很好的做法,这包括以某种方式初始化所有字段。
如果new SomeOtherClass();
恰好很慢并且消耗资源,那么第一个示例也会慢得多,因为每个方法调用都必须一次又一次地这样做。
相反,如果由于某种原因,每个方法都需要一个新的SomeOtherClass
实例,您可以使用属性来实现:
SomeOtherClass Obj => new SomeOtherClass();
现在,您可以在如下方法中使用它:
public methodOne()
{
Obj.someOtherClassMethodOne();
//use object here
}
这样,每次引用Obj时,都会创建一个新的SomeOtherClass实例,而不是重用旧的实例。
https://stackoverflow.com/questions/50687891
复制相似问题