实例化对象的差异 - C#basic

use*_*466 4 c# oop constructor properties object

我是面向对象编程的初学者,我有一个简单的问题.有什么区别:

public class Calculation
{
     private _externalObject = new ExternalClass();

     public int FirstParameter {get;set;}
     public int SecondParameter {get;set;}
     public int ThirdParameter {get;set;}
     public int FourthParameter 
     {
          get
          {
               _externalObject.Calculate(FirstParameter, SecondParameter, ThirdParameter);
          }
     }
} 
Run Code Online (Sandbox Code Playgroud)

public class Calculation
{

     private _externalObject;

     public Calculation()
     {
           _externalObject = new ExternalClass();
     }

     public int FirstParameter {get;set;}
     public int SecondParameter {get;set;}
     public int ThirdParameter {get;set;}
     public int FourthParameter 
     {
          get
          {
               _externalObject.Calculate(FirstParameter, SecondParameter, ThirdParameter);
          }
     }
} 
Run Code Online (Sandbox Code Playgroud)

我想学习如何编写最佳代码.

Ode*_*ded 7

在这种特殊情况下,没有任何可衡量的差异.

但是,如果您有多个构造函数,则必须在每个构造函数中初始化该字段,如果您未在字段声明中直接执行该操作.

这比个人风格更重要.


关于类设计和集成的注意事项 - 如果你有这样的外部依赖,那么好的OOP会要求你使用DI(依赖注入)而不是直接在类中实例化值.构造函数注入是一个不错的选择:

 private ExternalClass _externalObject;

 public Calculation(ExternalClass externalClass)
 {
       _externalObject = externalClass;
 }
Run Code Online (Sandbox Code Playgroud)

以上允许在不改变实际类的情况下修改行为并使类更易于测试.