2017-09-27 141 views
-3

我是C#的新手。我在网上搜索没有成功 找到我的问题的答案,也许这只是一个术语/语法 我错过了。C#类实例声明

我在学习一些其他人写的程序。该计划包括 在项目中包含的不同文件中的一些类。

在主程序文件,而不是使用这种方法,我知道的方式宣告这些类的新 实例:

namespace Technology_A3000_A4_A42107 
{ 
    public partial class FormTechnology : Form 
    { 
     ... 
     private AST_NET _device; 
     private ClassTechnology _technology; 
     private ClassGain _gain; 
     .... 
    } 


      public FormTechnology() 
     { 
      ... 
      _device = new AST_NET(); 
      _technology = new ClassTechnology(_device); 
      _gain = new ClassGain(); 
      .... 
     } 

    ....  

究竟是什么在这里做?这相当于在下面的行中写入 ,还是因为某些外部文件 或类的某些其他属性而需要它?

private AST_NET _device = new AST_NET(); 

在此先感谢和抱歉,如果这 是不是一个合适的问题。 Amitai

+0

[C#成员变量初始化的可能的复制;最佳实践?](https:// stackoverflow。com/questions/298183/c-sharp-member-variable-initialization-best-practice) – UnholySheep

回答

0

public FormTechnology() 
 
     { 
 
      ... 
 
      _device = new AST_NET(); 
 
      _technology = new ClassTechnology(_device); 
 
      _gain = new ClassGain(); 
 
      .... 
 
     } 
 
     
 

这FormTechnology是类FormTechnology的构造。当您创建FormTechnology的实例时,它将调用构造函数。作为一个结果,它会创建下面的类

  _device = new AST_NET(); 
 
      _technology = new ClassTechnology(_device); 
 
      _gain = new ClassGain();

0

C#编译器(如Java)的实例创建像

new Form().ctor() 

ctor()的输出是构造函数你是这样定义的

public Form(){ 
    // Some code 
} 

基本上,对称函数是创建类的新实例后调用的函数。你无法防止这一点。 所以我认为(不完全确定),但基于类的初始化是在构造函数之前完成的。所以像这样的值

public int value = 10; 

在构造函数之前被赋值。纠正我,如果我错了。

然而这是一个不好的设计,因为你无法具备的条件。

  • 在构造函数中,您可以动态设置值。
  • 在字段初始化(如上所示)的值必须在编译时是已知的。

希望这有助于?

+0

我想编译器会重写在构造函数中执行的字段初始化。 – thisextendsthat

+0

如果你阅读链接的重复问题,似乎是真的 – Meikel