C#静态方法的使用
作者:農碼一生 发布时间:2022-05-19 06:45:09
一、简介
使用了static 修饰符的方法为静态方法,反之则是非静态方法。 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。除此之外,静态方法和非静态方法有如下区别:
1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用;
2.静态方法只能访问静态成员和方法,非静态方法都可以访问;
3.静态方法不能标记为override,导致派生类不能重写,但是可以访问;
4.静态成员是在第一次使用时进行初始化。非静态的成员是在创建对象的时候,从内存分配上来说静态是连续的,非静态在内存的存储上是离散的,因此静态方法和非静态方法,在调用速度上,静态方法速度一定会快点,因为非静态方法需要实例化,分配内存,但静态方法不用,但是这种速度上差异可以忽略不计
5.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用,static内部只能出现static变量和其他static方法。而且static方法中还不能使用this....等关键字,因为它是属于整个类!
静态方法:原理就是共享代码段 共享代码段不会产生任何问题 因为代码段都是给CPU作为"读取"用的,除非你进行恶意"修改"运行时的代码段 所以静态方法是可以放心使用的 。
静态变量:原理就是共享数据段 同上 只要没有进行"写入"操作就不会产生问题 但是数据通常都是用于读和写所以静态变量要注意使用。
二、代码案例
public class A
{
public static void Method1()
{
Console.WriteLine("我是Method1,是静态方法");
//静态方法中互获取类名
string className = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
Console.WriteLine("Method1方法所在类:{0}", className);//命名空间.类名
}
public void Method2()
{
Console.WriteLine("我是Method2,不是静态方法");
//非静态方法获取类名
string className = this.GetType().FullName;
Console.WriteLine("Method2方法所在类:{0}", className);//命名空间.类名;和上面方法同在一个类,所以输出结果相同
}
}
class Program
{
public static void Method3()
{
Console.WriteLine("我是Method3,不是是静态方法");
}
static void Main(string[] args)
{
A.Method1();
// A.Method2(); //报错,非静态方法必须通过实例化才能引用
A a = new A();
a.Method2();
Method3();
}
}
三、总结
使用静态得准则就是:
1.保证不会产生并发。
2. 在方便快捷和开发难度上做一个衡量。
来源:https://www.cnblogs.com/wml-it/p/14841441.html


猜你喜欢
- 前言在工作中遇到这样一个问题:开发过程中将数据库的账号、密码等信息配置在了一个单独的properties配置文件中(使用明文)。但运维人员要
- Java连接SQLServer 2008数据库的步骤:1.到微软官方下载jdbc 并解压,得到sqljdbc.jar和sqljdbc4.ja
- 最新Spring Data JPA官方参考手册 Version 2.0.0.RC2,2017-07-25https://docs.sprin
- 在处理模板时,可以由模板逻辑决定是否加载数据,以提高性能。在Spring Boot控制器中设置数据时,使用LazyContextVariab
- 我们先来看本地如何生成图片验证码的,再来写输出到网页的验证码如何实现。先来看最简单的—实现的功能是,将一个字符串变成图片写入到文件中实现代码
- 目录有状态组件异步 async/await引入 flutter_easyrefresh使用 flutter_easyrefresh运行结果结
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 前言本文主要给大家介绍了关于Kotlin如何开发Android应用的相关内容,关于kotlin我不过多的介绍了,下面直奔主题。第一步:为An
- 目标了解HTTP 请求/响应头及常见的属性;了解如何使用SpringBoot处理头信息 ;了解如何使用SpringBoot处理Cookie
- 什么是断点续传用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断
- BigDecimal的舍入模式(RoundingMode)BigDecimal.divide方法中必须设置roundingMode,不然会报
- Equals和GetHashCodeEquals每个实现都必须遵循以下约定:自反性(Reflexive): x.equals(x)必须返回t
- 本文主要介绍了Spring Boot 应用可视化监控,分享给大家,具体如下:1、Spring Boot 应用暴露监控指标【版本 1.5.7.
- 获取方法的相关信息的两种形式反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象;在.Net 中, 一旦获得了Type对
- 1:什么是Socket所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信
- spring boot 使用profile来分区配置很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时
- xml中: <ImageView &nb
- 你是否遇到过,出现异常的时候也需要给一个默认值,让程序可以继续运行下去?一般的做法就是 一个达到try catch,然后在finally里面
- Android 代码写控件代替XML简单实例简单的一个Button控件的练习。实现代码:Button btn = new Button(Ha
- 本文实例为大家分享了java实现PDF转图片的具体代码,供大家参考,具体内容如下1.首先利用maven引入所需jar包<depende