1)在之前的环境里,我们对类的认识是要定义一个类,必须使用class 来定义,这是没有问题的。
比如: class person()
2) 看如下的代码:
Public person()
{
age = 18;
}
从这段代码看,这是一个无参的构造函数,那么问题就来了。
public 是自己定义了一个类person?还是引用了已经定义好了的类person?
这直接牵涉到一个问题,构造函数是自己可以定义类还是仅仅只是引用了class 已经定义好的类?
各位如何看待这个问题?
这个是构造函数的语法标准 必须和类名一样
public class Hello { public Hello() //构造函数的方面名要和类一致 { } public void Hello2()//还有Hello 和Hello2 不是类,是叫方法名,构造函数就是方法名字和类名一样的方法 { } }
你指出了类, 不是在构造函数这里定义的,她仅仅只是引用了类名。
你说的,是不是可以说构造函数就是一个方法?是不是就是定义了一个方法?
@绿绿山水: 是的 构造函数是一个特殊的方法。他的方法名和类名一样,牢记构造函数没有返回值!有参数是方便初始化一些信息!
就是你在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: 这个输出的是:
Hello World!
ThreeClass构造函数
而:
ThreeClass带参数的构造函数 是参数,没有进行输出。
public 是开放的意思啊。就是 谁都可以用。
相对的private 是私有的,没人能访问。
这个我当然知道,Public 只是一个修饰符,在这里直接 修饰了person
我问的重点是构造函数是自己定义了一个类person,还是只是引用了这个类person?
如果没有先定义person这个类,如何去使用?
@绿绿山水: [滑稽]
默认的实现是,如果没有找到构造函数,就使用一个无参的构造函数,或者叫有一个默认行为。
C# 只是语言,一个约定,至于你这个问题,他想怎么做就怎么做。你只要知道使用某种语法能出某些东西就行了。
构造函数是类的成员,它是依附于类而存在的。
类的成员包含:字段、属性、事件、构造函数、方法、索引器、运算符,...
说的是没错,这些是概念,不过我的疑问不是这些
哎呀,你好像很久没有提问了啊
是呀,之前太忙了,休息了一下,现在我回来了,怎么不欢迎吗?
明明是包含的关系.为什么到你这成了 :构造函数是自己可以定义类还是仅仅只是引用了class 已经定义好的类?
有这个问题说明你处于混沌状态.睡一觉再学吧.
你无非是想说,构造函数是类的成员。意思是类不是在这里定义的,你指的很中肯。
不过楼上的87Super的回答,也指出了这点,并且指出了,构造函数引用了类名作为方法名。
你说的是没错,回答也很犀利。可见对问题的把握很死。虽然不是最佳答案,却是最犀利的答案。
你的意思是,先有鸡还是先有蛋,先定义类再有构造函数,还是先有构造函数后类被定义,这个我也不太清楚,不过我可以给你提供一个思路,为什么 类里的方法可以实现递归 如 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是运行时产生的。 你想知道的答案可能就在 编译代码的过程里。
这个是先有类,再有构造函数,没有类,构造函数也无从谈起。
方法也在类的范畴内,应用功能是无法跟类比的。
@绿绿山水: 我尽量理解你的问题做出的回答,看来你已经有答案了。类似的问题其实是想要了解设计者的意图,和规范是如何被定义的。