c#静态方法中为什么可以调用非静态的构造函数?比如实例化对象!!

如题所述

C#不熟 但是玩过C++
1.面向对象的预言里面 静态方法无非就是独立于对象的一种方法。这种方法不需要要实例化具体的对象,通过类名即可调用,很多工具类用的就是公开的静态方法。
2.没有非静态的构造函数这么一说,可以说 静态函数和构造函数本身就是互斥的。
3.静态函数不代表不能在函数体内去实例化一个对象,建议看看工厂模式。典型的静态方法中实例化一个具体的类对象。追问

构造函数不就是类的一个用来实例化对象的特殊方法吗?程序入口是静态的方法,但是构造函数没有用static修饰啊?为什么就可以直接调用?求原理!!再多问一个嘿嘿··为什么结构里可以有构造函数,但是该构造函数为什么就不能是无参的呢?

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-27
为什么不可以调用?静态方法不过是一段程序而已,所有的程序的入口都必须是静态的,不然无法运行,静态的程序不能调实例化方法,那跟C还有什么区别。

讲白了方法什么的其实不过就是个带this指针的函数而已追问

静态的方法或字段在程序一运行时就保存在内存中,那未实力化之前非静态的字段和方法存放在哪里?

追答

所有的方法都是在执行的时候才会由JIT编译器编译成机器码才存到内存里的,静态字段会在类相关的存储堆存储。

未实例化的对象怎么可能有非静态的字段存储呢?和类相关联的实例字段都是在new 初始化以后在内存分配的,实例方法是在执行的时候由JIT编译成机器码放到Meta堆里面

本回答被提问者和网友采纳
第2个回答  2012-12-27
静态方法可以通过类名访问,也可以通过创建对象访问。

c#静态方法可以调用非静态方法吗
可以啊 =-= 只要你静态方法里能获取到其他的对象,再调用这个对象的非静态方法不就得了 只不过你不用指望在静态方法里用 this 就对了

JAVA中 在static方法内部能否调用非静态方法
可以在调用之前实例化非静态方法所在的类,再用类点方法来调用。例:非静态方法是className类里面的method();className cn=new className();cn.method();这样就可以了。

C#中,静态的构造函数跟非静态的有什么区别?
静态构造函数是最早被调用的,只要有静态访问,那么就先调用静态构造函数。其他非静态构造函数会在调用完毕静态的成员之后才被调用。所以一般静态构造函数用来为静态成员初始化,或者作为单件模式中创建对象的唯一入口。例如:private static GoodsManager s_Instance;public static GoodsManager Instance { get{r...

c#静态方法的参数为什么必须是静态的
1.因为非静态参数必须在类被实例化后将其赋值,这时非静态成员才拥有了值。2.而静态方法属于整个类,并不单单只属于某个类的实例。3.静态方法可以直接用类名来调用而不需要用new关键字创建类的实例,当通过类名直接调用该类中的静态方法时如果访问了非静态的参数,这个时候非静态参数在内存中根本不存...

c#静态类中能不能有非静态的方法,反过来非静态类中能不能有静态方法?最...
静态类不能有非静态的方法,例如Sytem.Console里面都是静态方法,非静态类可以有静态方法,例如String类有静态方法Format和Join,同时也有非静态方法IndexOf。软糖的答案满意吗,请及时采纳谢谢~

请问在C#里可以在static的方法里调用全局变量吗?
可以使用,需在静态方法中创建这个类的对象,用对象名.a的方式来调用它.因为a 为非静态的变量,静态的方法只能访问静态的方法或变量.如果非要在静态的方法中访问静态成员,只能使用创建对象的方法来使用.

为什么静态方法不可以直接new 一个 非静态内部类 的 对象,还得加上外部...
非静态内部类:要实例化必须先实例化外部类,他是依赖于外部类实例的,所以他才能够有资格访问外部类的非静态属性,即使是private属性,但是非静态内部类中是不能有静态属性的 严格来说,内部类就是外部类的一个属性,既然是自己的属性当然就能被其他属性和方法访问,因此应该遵循属性访问的一般规则,即非...

c# 程序里 什么时候应该用静态方法 什么时候用非静态方法
你就自己知道在什么时候用了。静态的方法就在在程序启动的时候,系统自己建立一个该方法的实例在内存里面,不需要我们在手动去实例该方法,可以直接调用,还有就是该实例会在内存中占一定的内存空间,这个内存空间只要程序不退出就会一直占用,所以在内存比较小的时候尽量少用静态方法,...

“无法从静态上下文中引用非静态方法”这个问题怎么解决?
静态方法中不能直接调用非静态方法。因为非静态方法不是独立存在的,它是依附于对象存在——即只有申明了对象,才能通过对象调用。而静态方法则可以直接通过类名调用,而不需要申明对象。因此直接引用非静态方法就会出错。比如常见的main方法都是静态的,必须由static修饰,因此在main方法里调用类的其他非静态...

错误: 无法从静态上下文中引用非静态方法
静态方法可以通过所在类直接调用而不需要实例化对象,非静态成员变量则是一个对象的属性。它只有在有实例化对象时才存在的,所以在静态方法中是不可以调用静态变量。如果发生调用,则编译器会报出如上的错误。例如:由于main方法其实是一个静态方法,而maxProfit方法并没有实例化,所以会报错 错误: 无法从...

相似回答