C#编程基础(下)第一课—扩展内容2:C#中静态方法和实例化方法(普通方法)的区别及使用

版权声明:王迪 https://blog.csdn.net/dnruanjian/article/details/86636176

知识点:C#中静态方法和普通方法的区别、使用

1、定义方法的格式

访问修饰符  返回类型  方法名 (参数列表)
{
      // 方法的主体…
}

 

2、静态方法

在大多数时候,我们定义写一个方法,会把方法区分为实例化方法(普通方法)和静态方法。

用static修饰一个方法,就是静态方法。

        public  string InstanceMethod()//定义一个实例化方法(普通方法)
        {
            return "实例化方法(普通方法)";
        }
        public  static string StacticMethod()//定义一个静态方法
        {
            return "静态方法";
        }

3、静态方法和实例化方法的区别

  • 静态方法和实例方法,在加载时机上是一样的,在类型第一次被使用的时候加载,调用的速度基本上没有差别
  • 静态方法和实例化方法在本质上都是方法,所以在内存中,无论是静态方法还是实例化方法,在内存中都只保存一份
    • 而且代码中的所有方法都会保存在一个特定的区域
  • 如果一个方法,与他所在的类的事例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。
  • 从面向对象的角度来说,在抉择使用静态方法还是实例化方法,应该依据这个方法和实例化对象是否有逻辑关系
  1. 一个方法和他所在类的实例对象无关,不依赖new出来的实例,那么它就应该是静态的
  2. 不需要面向对象的理念的时候用静态;比如动物-> RUN ,因为你可能会扩展出猫 run、狗 run,这时候就需要用非静态的方法
  • 静态方法只与类有关,它不依赖于对象的存在而存在;实例方法则在对象存在后才能使用。

4、为什么要把方法分为静态方法和实例化方法?

早期的结构化编程,几乎所有的方法都是“静态方法”,而直到面向对象编程语言来临时,才被区分为了实例化方法和静态方法。而这样的区分,并不是单一从性能的角度进行考虑的,而是为了让开发更加模式化,面向对象化。

比如说人这个类,姓名、年龄等,这些属性就必须是实例化属性,而所属科目,比如灵长类,则一定是静态属性,因为这个属性并不依赖于某一个人。

总结:静态方法用在与类中属性无关的函数,而实例化方法用在与类中属性有关的函数。

           而在真实的实践当中也证明,静态方法的调用并不比实例化方法效率更高。

 

5、普通方法、静态方法的使用

实例化方法:需要实例化对象,用对象点出来。

静态方法:直接用类名点出来,不需要实例化对象。

5.1 如果两个方法都是实例化方法(普通方法),那么可以直接用方法名调用

        public void Eat()
        {
            Console.WriteLine("吃饭!");
            Sleep();//直接调用Sleep方法
        }
        public void Sleep()
        {
            Console.WriteLine("睡觉!");
        }

5.2 如果两个方法都是静态方法, 那么可以直接用方法名调用

        public static void Hello()
        {
            Console.WriteLine("Hello!");
        }
        public static void Music()
        {
            Hello();//直接调用Hello方法
        }

5.3 在静态方法中调用非静态方法,那么要先创建对象,再通过对象名.方法名()

改正方法:先创建对象,然后使用对象名.方法名()来调用方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            Program a = new Program();//先创建一个对象
            a.Hello();//通过 对象名.方法名(),来调用方法
            Console.ReadLine();
        }
        public  void Hello()
        {
            Console.WriteLine("Say Hello!");
        }
    }
}


5.4 在非静态方法中,可以使用静态方法

        public  void Name()
        {
            Hello();//在非静态方法中,直接调用静态方法
        }
        public static void Hello()
        {
            Console.WriteLine("Say Hello!");
        }

建议:少用静态方法,因为它占内存。

======================这里是结束分割线==========================

猜你喜欢

转载自blog.csdn.net/dnruanjian/article/details/86636176
今日推荐