首页 新闻 会员 周边

对于构造函数的一点疑问

-3
[已解决问题] 解决于 2017-12-14 11:22

1)在之前的环境里,我们对类的认识是要定义一个类,必须使用class  来定义,这是没有问题的。

比如: class person()

 

2) 看如下的代码:

 Public  person()

{

age = 18;

}

从这段代码看,这是一个无参的构造函数,那么问题就来了。

public 是自己定义了一个类person?还是引用了已经定义好了的类person?

这直接牵涉到一个问题,构造函数是自己可以定义类还是仅仅只是引用了class 已经定义好的类?

 

各位如何看待这个问题?

绿绿山水的主页 绿绿山水 | 菜鸟二级 | 园豆:248
提问于:2017-12-14 08:59
< >
分享
最佳答案
1

这个是构造函数的语法标准  必须和类名一样

    public class Hello
    {
        public Hello() //构造函数的方面名要和类一致
        {

        }

        public void Hello2()//还有Hello 和Hello2 不是类,是叫方法名,构造函数就是方法名字和类名一样的方法 
        {

        }
    }
奖励园豆:5
87Super | 初学一级 |园豆:107 | 2017-12-14 09:27

 你指出了类, 不是在构造函数这里定义的,她仅仅只是引用了类名。

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 10:17

你说的,是不是可以说构造函数就是一个方法?是不是就是定义了一个方法?

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 10:31

@绿绿山水: 是的 构造函数是一个特殊的方法。他的方法名和类名一样,牢记构造函数没有返回值!有参数是方便初始化一些信息!

87Super | 园豆:107 (初学一级) | 2017-12-14 10:39

 就是你在new一个对象的时候,就会调用构造函数。

    class FirstClass
    {
        public FirstClass()
        {
            Console.WriteLine("FirstClass的构造函数");
        }
    }

    class TwoClass:FirstClass
    {
        public TwoClass()
        {
            Console.WriteLine("TwoClass构造函数");
        }
    }

    class ThreeClass:TwoClass
    {
        public ThreeClass()
        {
            Console.WriteLine("ThreeClass构造函数");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            ThreeClass tc = new ThreeClass();
            Console.ReadKey();
        }
    }

这段程序运行会输出

---------------------

Hello World!
FirstClass的构造函数
TwoClass构造函数
ThreeClass构造函数

-----------------------------

我们可以看出几点,new子类对象的时候,也会调用父类的构造函数。

还有就是构造函数,在你不写的时候 他默认也有一个构造函数,只是里面什么都没有。

    class ThreeClass
    {
        public ThreeClass()
        {
            Console.WriteLine("ThreeClass构造函数");
        }
        public ThreeClass(string str)
        {
            Console.WriteLine(str);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            //ThreeClass tc = new ThreeClass();
            ThreeClass tc = new ThreeClass("ThreeClass带参数的构造函数"); 
            Console.ReadKey();
        }
    }

上面的代码输入

--------------------------

Hello World!
ThreeClass带参数的构造函数

--------------------------------

当然在实际中我们不止是输出控制台,一般是对一些属性进行初始化。

87Super | 园豆:107 (初学一级) | 2017-12-14 10:50

@87Super: 这个输出的是:

Hello World!
ThreeClass构造函数

而:

ThreeClass带参数的构造函数 是参数,没有进行输出。

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 11:16
其他回答(5)
-1

public 是开放的意思啊。就是 谁都可以用。
相对的private 是私有的,没人能访问。

长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-12-14 09:03

这个我当然知道,Public 只是一个修饰符,在这里直接 修饰了person

我问的重点是构造函数是自己定义了一个类person,还是只是引用了这个类person?

如果没有先定义person这个类,如何去使用?

 

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 09:07

@绿绿山水: [滑稽]
默认的实现是,如果没有找到构造函数,就使用一个无参的构造函数,或者叫有一个默认行为。
C# 只是语言,一个约定,至于你这个问题,他想怎么做就怎么做。你只要知道使用某种语法能出某些东西就行了。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2017-12-14 09:12
-2

构造函数是类的成员,它是依附于类而存在的。

类的成员包含:字段、属性、事件、构造函数、方法、索引器、运算符,...

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-14 09:46

 说的是没错,这些是概念,不过我的疑问不是这些

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 10:17
0

哎呀,你好像很久没有提问了啊

猝不及防 | 园豆:2731 (老鸟四级) | 2017-12-14 10:00

是呀,之前太忙了,休息了一下,现在我回来了,怎么不欢迎吗?

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 10:18
1

明明是包含的关系.为什么到你这成了 :构造函数是自己可以定义类还是仅仅只是引用了class 已经定义好的类?

有这个问题说明你处于混沌状态.睡一觉再学吧.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-14 10:00

你无非是想说,构造函数是类的成员。意思是类不是在这里定义的,你指的很中肯。

不过楼上的87Super的回答,也指出了这点,并且指出了,构造函数引用了类名作为方法名。

你说的是没错,回答也很犀利。可见对问题的把握很死。虽然不是最佳答案,却是最犀利的答案。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 10:21
1

你的意思是,先有鸡还是先有蛋,先定义类再有构造函数,还是先有构造函数后类被定义,这个我也不太清楚,不过我可以给你提供一个思路,为什么 类里的方法可以实现递归 如 public void digui (int i =0){i++;if(i==10) return;  return digui(i); }

而 在方法中定义的 action 却无法递归自身。 如 public static void main (){

    Action<int> digui = (i)=>{i++;if(i==10)return; return digui();//语法错误 编译会报错

};

}

这个是因为,函数是预编译的,而 action是运行时产生的。 你想知道的答案可能就在 编译代码的过程里。

zwsu | 园豆:217 (菜鸟二级) | 2017-12-14 11:12

 这个是先有类,再有构造函数,没有类,构造函数也无从谈起。

 方法也在类的范畴内,应用功能是无法跟类比的。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-14 11:21

@绿绿山水: 我尽量理解你的问题做出的回答,看来你已经有答案了。类似的问题其实是想要了解设计者的意图,和规范是如何被定义的。

支持(0) 反对(0) zwsu | 园豆:217 (菜鸟二级) | 2017-12-14 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册