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

标签:C#,静态,方法
0
投稿

猜你喜欢

  • Java设置PDF有序和无序列表的知识点总结

    2022-04-18 03:29:27
  • C# 对文件与文件夹的操作包括删除、移动与复制

    2023-11-16 07:20:46
  • 在实践中了解Java反射机制应用

    2021-06-29 02:40:14
  • 深入浅析c#静态多态性与动态多态性

    2022-10-16 09:41:17
  • Java压缩文件ZIP实例代码

    2022-03-25 04:08:27
  • c#删除指定文件夹中今天之前的文件

    2022-02-26 22:57:27
  • Spring Boot MQTT Too many publishes in progress错误的解决方案

    2023-06-27 02:16:44
  • SpringMVC+Mybatis实现的Mysql分页数据查询的示例

    2023-11-24 20:53:33
  • SpringBoot集成Redis—使用RedisRepositories详解

    2023-09-04 08:55:59
  • Java基本数据类型(动力节点java学院整理)

    2022-09-26 12:14:13
  • 关于Maven的使用,这些你都真的了解么

    2022-01-02 14:19:08
  • 基于CXF搭建webService的实例讲解

    2023-07-02 10:41:34
  • C# 调用C++写的dll的实现方法

    2022-10-25 11:36:56
  • 关于spring boot中几种注入方法的一些个人看法

    2022-09-07 10:15:14
  • java分布式面试CAP分别代表含义分析

    2021-10-05 17:54:47
  • 详解Spring boot上配置与使用mybatis plus

    2023-02-27 08:53:11
  • 浅谈java 单例模式DCL的缺陷及单例的正确写法

    2022-04-14 05:58:23
  • Spring Boot 2结合Spring security + JWT实现微信小程序登录

    2022-07-14 08:25:54
  • 移动端WebApp隐藏地址栏的方法

    2022-09-26 20:26:29
  • Android巧用DecorView实现对话框功能

    2022-07-14 14:03:40
  • asp之家 软件编程 m.aspxhome.com