• 构造函数的重载


    构造函数的重载是挺明显的一件事,我们经常声明一个类对象时,有时写上一些参数,有时什么参数都不写。如果是VB,只能用optional来实现,并且限制还挺多的。而面对对象中,却可以用重载来灵活实现。
    先写一个例子看看:

    using System;

    class m
    {
     
    static void Main()
     
    {
      point p
    =new point(12);
      Console.WriteLine (
    "x=" + p.x.ToString());
     }

    }


    class point
    {
     
    int m_x = 0;
     
    public int x
     
    {
      
    get return m_x; }
      
    set { m_x = value; }
     }


     
    public point() {}
     
    public point(int x0)
     
    {
      m_x 
    = x0;
     }

    }

    这里,我想到之前,我就对C++一个函数有那么多种表达表示奇怪,现在看来,就是重载帮的忙。
    把point类放到VS2005中,在定义代码中如愿出现了两个定义让我选择。过瘾!不过好
    象系统的类底下还可以有一排提示。搜索后得知只要这样写就可以实现该功能了。这样更过瘾。
    /// <summary>
    /// 直接初使化X坐标
    /// </summary>
    /// <param name="x">X坐标</param>
    /// <returns>构造函数</returns>
    public point(int x0)
    {
     m_x = x0;
    }
    当有参数时,描述的那句话不会出来,而没有参数时,描述的就出来了。返回值在输
    入过程中,一直没有出来。不管怎样,这样在F2的“对象浏览器”中都有完整表达。以前看JAVA时,有个文档自动生成方式,代码写好了,文档也就写好了,在C#中,可以找一个项目试试看这种思想对自己有没有效果了。

    重载构造函数时,有要求“每个构造函数必须有不同的参数表”,我不知道“public point(int x0)”与“public point(int y0)”是否是不同的参数表,写个代码验证一下:

    using System;

    class m
    {
     
    static void Main()
     
    {
      point p
    =new point(12);
      Console.WriteLine (
    "x=" + p.x.ToString());
     }

    }


    class point
    {
     
    int m_x = 0;
     
    int m_y = 0;
     
    public int x
     
    {
      
    get return m_x; }
      
    set { m_x = value; }
     }

     
    public int y
     
    {
      
    get return m_y; }
      
    set { m_y = value; }
     }


     
    public point() {}
     
    public point(int x0)
     
    {
      m_x 
    = x0;
     }

     
    public point(int y0)
     
    {
      m_y 
    = y0;
     }

    }

    编译结果:
    p.cs(32,9): error CS0111:
            类型“point”已定义了一个名为“point”的具有相同参数类型的成员
    p.cs(28,9): (与前一个错误相关的符号位置)
    编译器认为是同参,因此出错了。后来想一下看,也是为难编译器了,即使是人,也
    不能分辩出“point p=new point(12);”这句话到底要用哪一个构造函数。

    对构造函数,当初还有一个疑问:既然属性都可以直接赋初使值(如private int m_x=12;),为什么还要重构函数,现在想起来,原来我开头看到的都是默认构造函数里面写的代码(如public point() {m_x=0; m_y=0;})才有这种疑问。

  • 相关阅读:
    android模拟器上网设置
    20150916自动化测试之Appinum For Android(环境搭建之下载更新安装AndroidSDK包)
    测试部门目标
    grade 错误
    质量保证
    emma覆盖率
    python学习(二)--数据类型
    python学习(一)--python解释器
    fidder从基础到熟练
    这几天帮一个朋友解决了一点小问题(RF的有些小问题及解决过程)
  • 原文地址:https://www.cnblogs.com/yzx99/p/1206982.html
Copyright © 2020-2023  润新知