静态方法与非静态方法区别

C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析。 
C#的类中可以包含两种方法:C#静态方法与非静态方法。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?

让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法。 

下面我们分四个方面来看看C#静态方法与非静态方法的差异: 

比较一、C#静态成员 

①静态成员属于类所有,非静态成员属于类的实例所有。 
②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储; 
静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。 

比较二、C#静态方法: 

对于这一块不是很清楚,找到一篇文章,有点明白了,记录一下

1、C#静态方法属于类所有,类实例化前即可使用。 

2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。 
因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存, 这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。 

比较三、

C#静态方法是一种特殊的成员方法 它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。 
1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! 

static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类! 
2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。 
3.静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存. 
4.C#中的方法有两种:实例方法,静态方法. 

比较四、C#静态方法中获取类的名称: 
静态方法中用: 
string className =   System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName; 
非静态方法中还可以用: 
string className = this.GetType().FullName;  

C#静态方法与非静态方法的区别解析旨在诠释C#静态方法的含义,希望对你了解和学习C#静态方法与非静态方法有所帮助。

原文出处

http://www.cnblogs.com/luoluo01/archive/2012/10/26/2741218.html

时间: 2024-09-29 05:03:56

静态方法与非静态方法区别的相关文章

浅析php静态方法与非静态方法的用法区别_php技巧

在php编程中,static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法" 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号"::"调用. static关键字可以用来修饰变量.方法. 不经过实例化,就可以直接访问类中static的属性和static的方法. static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法.因为静态属性

C#静态方法与非静态方法的比较

C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢? 他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为 静态方法,反之则是非静态方法. 下面我们分四个方面来看看C#静态方法与非静态方法的差异: C#静态方法与非静态方法比较一.C#静态成员: ①静态成员属于类所有,非静态成员属于类的实例所有. ②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储: 非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例, 类的

java静态方法和非静态方法有什么不同?

问题描述 本人菜鸟,想知道java中静态方法和非静态方法在内存存储上有什么不同啊?生存周期是怎么样的啊?谢谢各位了! 解决方案 解决方案二:菜鸟2我只知道静态的话可以不用NEW对象出来就可以引用.^_^解决方案三:都存放在代码区,静态方法是类方法,不用创建对象,直接拿来就用,而非静态方法是对象方法,需要创建对象,然后用对象去访问.解决方案四:个人想法:在内存的存储主没什么区别,主要的区别,是在编程这个角度上,进行了访问权限的区别,另外,是jvm(虚拟机)在销毁方法上有区别,对于静态方法,除非jv

C#静态方法与非静态方法实例分析_php技巧

本文实例分析了C#静态方法与非静态方法,并对其用法进行了较为全面的分析.分享给大家供大家参考.具体分析如下: 通常来说,C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身.所以对静态方法不需要首先创建一个类的实例,而是采用 类名.静态方法 的格式 . 1)static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用. static内部

浅谈PHP中静态方法和非静态方法的相互调用

在PHP的非静态方法中可以调用静态方法 class test{ public static function strPrint(){ echo 'this is strPrint static function<br>'; } public function staticFuncInvoke(){ self::strPrint(); } } $test = new test(); $test->staticFuncInvoke(); 上面的代码会输出: this is strPrint

静态方法调用非静态方法

问题描述 publicpartialclassForm1:FormpublicstaticvoidM2K_getUdpMessage(StringBuilderbytData,UInt16wSize){stringszShowData="";szShowData=bytData.ToString();strMsg=szShowData;Console.WriteLine("Message:"+Environment.NewLine+strMsg+Environmen

PHP中静态方法(static)与非静态方法的使用及区别

static关键字用来修饰属性.方法,称这些属性.方法为静态属性.静态方法. static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法" 如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号"::"调用. static关键字可以用来修饰变量.方法. 不经过实例化,就可以直接访问类中static的属性和static的方法. static 的属性和方法,只能访问sta

java-类是非静态的,而类中的主函数是静态的,静态方法为什么可以调用非静态类的内部类的非静态方法

问题描述 类是非静态的,而类中的主函数是静态的,静态方法为什么可以调用非静态类的内部类的非静态方法 代码如下所示,TestEX是非静态类,而它的主方法是静态的,TestEX类中含有两个内部类,两个内部类也是非静态的,内部类中的方法同样也是非静态的. 问题是:在静态的主方法中,实例化了内部类,为什么就可以调用非静态了呢? 哪个圈绕不出来了,求帮助! public class TestEX{ public class IntegerException extends Exception { Stri

java静态方法和实例方法的区别

静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名. 方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就 是说,调用静态方法可以无需创建对象. 静态方法在访问本类的成员时,只允许访问静态成员(即静 态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制. 下面几个 例子展示了这一区别. 1.调用静态方法示例. //-----------hasStaticMethod.java-