zoukankan      html  css  js  c++  java
  • C#中静态方法和静态变量的使用问题

    1:静态方法不可访问类成员非静态成员。

    2:在类中静态变量在载入的是分配一个内存空间,所有的变量类共享一个内容,如果任何一个对象修改了静态变量的值,所有变量输出的值都会改变:例如代码:

    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                Person p = new Person("胡明豪");
                label1.Text=p.GetName();
                Person p1 = new Person("胡明豪2");
                label2.Text = p1.GetName();//显示为胡明豪2
                label3.Text = p.GetName();//胡明豪2
            }
        }
    }

    3. 静态方法并不存在常驻内存,性能高等特点。方法跟属性不一样,方法在调用时都需要从代码区域获取一份本方法的代码去执行,在这一点上静态和非静态方法没有本质区别。在AppDomain加载程序集时,代码被放到特定的只读区域,不存在静态非静态之分。

    4. 静态方法不能访问实例的方法,属性等,但实例方法则无此限制。同时需注意在多线程编程中,任何方法(包括静态和非静态)对本方法外定义的属性,变量等的访问和修改需谨慎,因为这可能导致线程安全问题。

    5. 静态方法不能被继承,重写,因为static修饰符不能跟virtual, abstract, override等共存,因此在一些面向对象的设计中要谨慎使用,它在一定程度上的确会破坏面向对象设计OO特性,诸如继承,多态等。 但对于一些功能相对独立,不需要跟其它对象有很多调用,又不需要经常修改的方法,可以使用静态方法,静态方法在调用时相对简单明了。

     6:在不需要更改类成员变量是使用静态方法。

    7:一直以为静态方法在多用户并发下会是排队等待,一个个执行,原来是并发执行的,绝对不会排队等待。

  • 相关阅读:
    Python RabbitMQ
    对于一些概念的澄清
    Python没有执行__init__
    python中的gil是什么?
    linux命令行快捷键
    关于异步:再次思考和澄清
    greenlet代码解读
    关于协程
    设计模式-重复重复的设计模式
    组合模式-虚有其表的模式
  • 原文地址:https://www.cnblogs.com/Minghao_HU/p/2523892.html
Copyright © 2011-2022 走看看