美文网首页程序员
类中静态方法与动态方法的区别

类中静态方法与动态方法的区别

作者: 大力有话说 | 来源:发表于2018-03-16 10:00 被阅读0次

1.静态的方法在整个应用程序其间存储在内存中,速度快,但占用内存.

class A

{

    public static string b()

    {

        return "Hello";

    }

}  

用法: A.b(); //调用方便

2.动态的方法在先声明类实例才能调用类中的方法.

class A

{

    public string b()

    {

        return "Hello";

    }

}  

用法: A a = new a(); a.b();

3.一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己的需要选择是用动态方法还是静态方法。

4.静态方法主要的问题就是数据同步的问题。如果你的静态方法的类中不保存私有变量那么什么问题都不会有的。最好是包要操作的数据全部以参数的方式传到方法中去

5. 静态方法是类方法,调用时不需要创建类实例。
6. 静态方法是静态绑定到子类,不是被继承。

为了形象说明,请看下面的例子。

namespace Test.CUI
{
class Base
{
public Base()
{
Console.WriteLine("Base...");
}

public void Method()
{
}

public static void StaticMethod()
{
}

}

class Class1 : Base
{
public Class1()
{
Console.WriteLine("Class1...");
}

static void Test1()
{
  Class1 o = new Class1();
  o.Method();
}

static void Test2()
{
  Class1.StaticMethod();
}

static void Main(string[] args) 
{ 
} 

}
}

接下来,我们查看编译后的IL代码就会明白其中的奥妙。

.method private hidebysig static void Test1() cil managed
{
// Code Size: 13 byte(s)
.maxstack 1
.locals (
Test.CUI.Class1 class1)
L_0000: newobj instance void Test.CUI.Class1::.ctor() // 创建对象实例
L_0005: stloc.0
L_0006: ldloc.0
L_0007: callvirt instance void Test.CUI.Base::Method() // 使用callvirt
L_000c: ret
}

.method private hidebysig static void Test2() cil managed
{
// Code Size: 7 byte(s)
.maxstack 0
L_0000: call void Test.CUI.Base::StaticMethod() // 使用call
L_0005: nop
L_0006: ret
}

CLR提供了2个IL指令来调用方法:call和callvirt。其中call指令根据引用变量的类型(即引用变量的静态类型、声明类型)来调用一个方法,而callvirt指令根据引用变量的对象类型(引用变量的动态类型、实际类型)来调用一个方法。

7.从面向对象的角度来看:
静态方法面向的是类的操作,而实力方法面向的是对象.举个例子来说
例如动物,是一类,一只猫啦,一条狗啦,都是它的子类的一个对象,这些对象不同的猫和狗可能有不同的消化系统,还有行走之类的,所以它们的"爬行"方式可以不同,但是这些动物的死法都是一样的,那就是心跳停止,对于动物类的设计可以考虑这么一个方案:
public static void Kill ( Animal aAnimal)
{
//let the animal stop heart beating
}
对于每个对象的具体实现方式,由对象来完成.

8.静态方法修改的是类的状态,而对象修改的是各个对象的状态,这点也是它们重要的区别

9.类的实例化调用是在类的生命周期中存在,当类没有了以后,对应的实例也就没有了,对应的方法也就没有了,静态类不然,只要你引用了那个静态类的命名空间,他就会一直存在,知道你退出系统。

相关文章

  • 类中静态方法与动态方法的区别

    1.静态的方法在整个应用程序其间存储在内存中,速度快,但占用内存. 用法: A.b(); //调用方便...

  • python 高级语法

    一.Python 中类方法、类实例方法、静态方法有何区别定义区别:1.类方法和静态方法分别有专门的修饰符 @cla...

  • 小分享

    1.静态方法与非静态方法的区别 首先,两者本质上的区别是:静态方法是在类中使用staitc修饰的方法,在类...

  • python 静态方法,动态方法

    静态方法属于类 @statcmethod 方法没有self 静态方法与动态方法相比,静态方法可以不用实例化对象,直...

  • Python 实例方法、类方法和静态方法(转)

    原文链接概括来说,是否与类或者实例进行绑定,这就是实例方法、类方法、静态方法的区别。 在 Python 中,实例方...

  • 对象方法(实例方法) 类方法(静态方法)的区别

    参考资源 Objective-C中类方法、对象方法介绍及区别iOS---类方法(静态方法)和实例方法iOS 类方法...

  • python类的静态方法和类方法区别

    python类的静态方法和类方法区别 先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法。 本...

  • Java基础知识(二)

    一、final与static的区别 1.1、static 静态方法随着类的加载而加载到方法区中,但是在方法...

  • 问题

    SAP问题总结 跟踪 oo 类的实例化和静态区别 静态方法 静态方法是可以与类实例无关地调用的方法。您只能在St...

  • iOS-类方法与实例方法

    搬运自 动态方法/实例方法 静态方法/类方法 静态方法和实例方法的区分 使用场景

网友评论

    本文标题:类中静态方法与动态方法的区别

    本文链接:https://www.haomeiwen.com/subject/porlqftx.html