【问题标题】:C# class instance declarationC# 类实例声明
【发布时间】:2018-03-08 15:35:15
【问题描述】:

我是 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(); 

提前致谢,如果出现此问题,我们深表歉意 不是一个合适的问题。 阿弥陀佛

【问题讨论】:

标签: c# class instance class-variables


【解决方案1】:

  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();

【讨论】:

    【解决方案2】:

    c# 编译器(如 Java)创建类似的输出

    new Form().ctor()
    

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

    public Form(){
        // Some code
    }
    

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

    public int value = 10;
    

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

    然而这是一个糟糕的设计,因为你不能有条件。

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

    希望这有帮助吗?

    【讨论】:

    • 我认为编译器重写了要在构造函数内部执行的字段初始化。
    • 是的,如果您仔细阅读链接的重复问题,似乎是正确的
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多