C#静态方法与非静态方法的比较 <转载>
ref:http://www.router.net.cn/Article/24353.html
C#的类中可以包含两种方法:C#静态方法与非静态方法。那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法。
下面我们分四个方面来看看C#静态方法与非静态方法的差异:
C#静态方法与非静态方法比较一、C#静态成员:
①静态成员属于类所有,非静态成员属于类的实例所有。
②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;
非静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,
类的静态成员在内存中只占同一块区域。
C#静态方法与非静态方法比较二、C#静态方法
1、C#静态方法属于类所有,类实例化前即可使用。
2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,
这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。
C#静态方法与非静态方法比较三、C#静态方法是一种特殊的成员方法
它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。
1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用!
static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!
2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
3.静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.
4.C#中的方法有两种:实例方法,静态方法.
C#静态方法与非静态方法比较四、C#静态方法中获取类的名称
静态方法中用:
- string className =
- System.Reflection.MethodBase.
- GetCurrentMethod().ReflectedType.FullName;
非静态方法中还可以用:
- string className = this.GetType().FullName;
C#静态方法与非静态方法的区别解析旨在诠释C#静态方法的含义,希望对你了解和学习C#静态方法与非静态方法有所帮助。
转载于:https://www.cnblogs.com/BpLoveGcy/archive/2010/03/22/1691284.html
C#静态方法与非静态方法的比较 <转载>相关推荐
- C#静态类 静态方法与非静态方法比较
静态类 在类(class)上加入static修饰,表示该类无法被实例化,并将该类中,无法实例化变量或函数 静态类的主要特性 仅包含静态成员 无法实例化 静态类的本质,时一个抽象的密封类,所以不能被继承 ...
- C#中静态方法和非静态方法的区别
静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为overri ...
- 静态方法 与 非静态方法的区别/static 关键字
为什么80%的码农都做不了架构师?>>> 使用static修饰的静态方法是属于整个类的类方法,它在内存中的代码段会随类的定义而被分配和装载:而非静态方法是属于具体对象的方法,当 ...
- java中synchronized修饰静态方法和非静态方法有什么区别?
Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称"对象锁". Java中每个对象都有一个锁,并且是唯一的.假设分 ...
- 使用synchronized修饰静态方法和非静态方法有什么区别
前言 最近被问到了这个问题,第一次回答的也是很不好,在此参考网上答案进行整理记录.供大家学习参考. Synchronized修饰非静态方法 Synchronized修饰非静态方法,实际上是对调用该方法 ...
- java静态方法 问题_Java中堆、栈,静态方法和非静态方法的速度问题
一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...
- php中静态方法有什么作用,PHP中的静态方法与非静态方法有什么不同吗?
除此之外,如果您尝试在您的方法中使用$this,如下所示: class t { protected $a = 10; public function tt() { echo $this->a; ...
- php中静态方法的调用,php中静态方法和非静态方法如何相互调用?
php中静态方法和非静态方法如何相互调用?2020-09-01 00:05:28 php中静态方法和非静态方法相互调用的方法:1.非静态方法调用静态方法: 可以[self]或者类名加[::]的形式调用 ...
- php 静态方法特点,浅析php静态方法与非静态方法的用法区别
在php编程中,static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为"类属性"或"类方法" 如果访问控制 ...
最新文章
- web进修之—Hibernate 继承映射(5)
- 手动启动“远程过程调用”服务时,出现错误信息1058
- “供应链”之后,传统零售如何会战“服务链”?
- Spark _22 _创建DataFrame的几种方式(一)
- php 文章浏览量 缓存,WordPress缓存文章浏览量访问不自动增加怎么办?WordPress缓存导致文章阅读数点赞数不更新...
- linux 进程wait,linux 进程等待 wait 、 waitpid(示例代码)
- android 4.4 keyfactory.getinstance 报错_Android实际开发bug大总结
- 接口协作--apipost接口协作工具
- python调整图像大小_使用Python调整图像大小
- 在O(1)的时间内删除链表节点
- c语言数据结构练习复数操作
- 电子计算机奏出美妙的交响改为把字句,部编版四年级语文上册(课文内容填空+句子专练含答案).doc...
- 小黄鸡(小贱鸡)机器人
- 初来乍到:新用户冷启的算法技巧
- Excel应用:去除重复项,进行个数计算。
- ubuntu中如何修改计算机名字
- 0xFEFEFEFE 处有未经处理的异常(在xx中): 0xC00001A5: 检测到无效的异常处理程序例程。
- 24点卡牌游戏C++实现
- Android Preference详解
- 学习笔记:使用endnotesX9插入参考文献
热门文章
- java react_2019JAVA最新课程-React从入门到实战(新)
- c mysql导入数据_MySQL 数据导入
- 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行
- java中的随机生成算法_随机生成算法的java代码太复杂了
- java如何调用linux命令_java程序中如何调用linux命令
- c char转int_C/C++ 各数据类型占用字节数
- 把Faster-RCNN的原理和实现阐述得非常清楚
- 计算机专业毕业设计中期考核表,研究生中期考核表导师评语
- 电子计算机说明文作文,关于电脑说明文作文(精选3篇)
- qt qtableview mysql_Qt数据库编程中QTableView使用方法