代码之家  ›  专栏  ›  技术社区  ›  Chaitanya

构造函数的使用-奇怪的疑问

  •  7
  • Chaitanya  · 技术社区  · 16 年前

    我在读关于建设者的书,

    当为一个类实例化一个对象时,c'tor(如果显式编写或默认编写)是执行的起点。我的疑虑是

    • main() 在里面 C
    • 是的,我明白你的意思 可以使用设置所有默认值

    例子:

    //The code below is written in C#.
    public class Manipulate
        {
            public static int Main(string[] args) {
                Provide provide = new Provide();
                provide.Number(8);
                provide.Square();
                Console.ReadKey();
                return 0;
            }
        }   
    
     public class Provide {
            uint num;
            public void Number(uint number)
            {
                num = number;
            }
            public void Square()
            {
                num *= num;
                Console.WriteLine("{0}", num);
            }
        }
    

    我正在学习独立编程,所以我依赖于编程社区,你也可以建议我一个好的OOP的资源,以获得更好的理解。如果我离题了,请原谅。

    9 回复  |  直到 16 年前
        1
  •  3
  •   ckv    16 年前

    首当其冲OOA&D将是一个好的开始。

    您不觉得调用函数来设置类的每个成员变量有点开销吗。

    使用构造函数可以一次性初始化所有成员变量。这难道不足以让你拥有构造器吗。

        2
  •  2
  •   Amardeep AC9MF    16 年前

    构造函数和析构函数功能可以使用常规方法进行仿真。然而,这两种方法的独特之处在于语言以一种特殊的方式对待它们。

    他们是 自动 在创建或销毁对象时调用。这提供了一种统一的方法来处理在对象生命周期的这两个关键时期必须发生的最微妙的操作。它消除了类的最终用户忘记在适当的时间调用这些函数的可能性。

    此外,诸如继承之类的高级OO特性要求一致性才能正常工作。

        3
  •  2
  •   Jerry Coffin    16 年前

        4
  •  1
  •   Evan Trimboli    16 年前

    通常,您应该在构造函数中完成所有初始化。在创建类的实例时,首先调用构造函数,因此应该在此处设置任何默认值。

        5
  •  1
  •   Daniel Rodriguez MSFT    16 年前

    我认为一个很好的学习方法是比较不同语言之间的OOP,就像从不同的角度看同一幅画。

    搜索一下:

    为什么是建设者? 一个简单函数(也可能有函数在里面)和一个对象之间的主要区别是,一个对象可以被托管在一个“变量”中,所有的函数都在里面,而且它也可以完全不同于另一个“变量”,在同一个“对象”中做出反应。使它们具有相同结构和不同行为的方法取决于您给类提供的参数。 下面是一个懒惰的例子:

    c1=汽车()

    c2=汽车()

    c1就是c2?对。

    c2=汽车(兰博基尼)

    变量volkswagen和lamborghini直接传递给构造函数。 为什么是建造师?为什么没有其他功能?答案是:秩序。

        6
  •  1
  •   BobTurbo    16 年前

    不能在自定义方法中模拟构造函数,因为创建对象时不会调用自定义方法。只调用构造函数。当然,您可以在创建对象后调用自定义方法,但这不是惯例,其他使用您的对象的人将不知道如何执行此操作。

        7
  •  0
  •   newton    16 年前

    我们需要构造函数的原因之一是“封装”,代码做一些初始化必须是不可见的

        8
  •  0
  •   Falmarri    16 年前

    如果不使用构造函数,也不能强制传递变量。如果你只想实例化一个对象,如果你说一个int传递给它,你可以设置默认构造函数为private,让你的构造函数取一个int。这样,不让它取一个int就不可能创建这个类的对象。

        9
  •  0
  •   Ben Voigt    16 年前

    最后,任何常数(或C#, readonly