• 构造函数


    “构造函数是与类同名的特殊成员函数。当声明类的对象时,构造函数被自动调用以实现对该对象的初始化,因此构造函数必须是公有的成员函数。”
    构造函数的返回值是什么类型的?我看了一下,居然没有类型,也void都不必声明,
    是有点特殊。如果我们试着用void来画蛇添足地声明一下看编译器提示什么?

    using System;

    class m
    {
     
    static void Main()
     
    {
      point p
    =new point();
     }

    }


    class point
    {
     
    public void point() { }
    }

    编译结果:
    p.cs(13,14): error CS0542: “point”: 成员名称不能与它们的封闭类型相同
    p.cs(11,7): (与前一个错误相关的符号位置)
    即它先认为void point是一个普通成员函数,但它不能与类同名。
    试这一点时,我遇到一个问题:本来每个语句都要用分号结束,但这里,却不能写成
    public point() { };
    编译结果:
    p.cs(13,20): error CS1597: 方法或访问器块后面的分号无效
    这一点从理论上应该如何说明?特别是与enum的结构进行对比。

    另一种写法:public point();,编译结果
    p.cs(13,10): error CS0501: “point.point()”必须声明主体,因为它未标记为abstract 或 extern

    如果构造函数是private的将会如何?

    using System;

    class m
    {
     
    static void Main()
     
    {
    //  point p=new point();
     }

    }


    class point
    {
     
    private point() { }
    }

    如果注释第7行,编译是没问题的,但一个类连构造函数都是私有,它活着还有什么意义?(后来发现还真的有这种类(如Math类),这种构造函数称为“私有构造函数”,通常用在只包含静态成员的类中。看来我的公共子程序可以放在静态类中了,不错不错)
    如果构造函数不显式地声明为public,则它默认是private的,这一点,与前面测试的
    结果是一样的。

  • 相关阅读:
    10.17T1 联通块
    10.16复习 数位DP——不要62
    10.16T6 逆序对变式
    10.16T5 最小环+拆点最短路
    10.16T4 GCD递归
    10.16T2 平方差
    10.16T3 乱搞+最优性剪枝
    10.16T1 二分+单调队列优化DP
    10.15T3 树形DP
    10.15T2 生成树+非树边暴力
  • 原文地址:https://www.cnblogs.com/yzx99/p/1206955.html
Copyright © 2020-2023  润新知