静态类,方法,成员

2023-05-16

说起静态类,你可能会联想到实例类。这两者并不难区分,前者(静态类)只在内存中创建一个,而后者(实例类)则是每次实例化后,就会再内存创建一份。今天来简单聊一下静态类的理解。

代码情景: 

复制代码


class Program
{
      static void Main(string[] args)
       {
           Person p1 = new Person();
            p1.Name = "zs";
            p1.LivePlanet = "earth";

            Person p2 = new Person();
            p1.Name = "ls";
            p1.LivePlanet = "earth";
       }     
}


public class Person
{

        public string Name { get; set; }
        public int Age { get; set; }
        public string Phone { get; set; }
        public  string LivePlanet { get; set; }
}  

复制代码

根据以上的情景假如我需要实例化100个对象,而Person中的LivePlanet属性值都统一为earth,不就得反复重写100次? 这样妥吗?起码您应该知道违背了DRY原则。

好吧,我们来实现一下通过static 来改善这个代码:

复制代码


class Program
{
      static void Main(string[] args)
       {
           Person.LivePlanet = "earth"
           Person p1 = new Person();
            p1.Name = "zs";
            //p1.LivePlanet = "earth";

            Person p2 = new Person();
            p1.Name = "ls";
           //p1.LivePlanet = "earth";
       }     
}


public class Person
{

        public string Name { get; set; }
        public int Age { get; set; }
        public string Phone { get; set; }
        public  static string LivePlanet { get; set; }
}  

复制代码

我们在Person类把LivePlanet改成static,这样我们直接可以不需要实例化可以直接Person.LivePlanet = "earth"。这样的好处不仅在于此,而且这解决了当所有对象都共享同一个信息的时候,不需要重复去实例化再去调用这个对象。

请注意以下几点:

1.存储在静态成员中的信息只有在应用程序退出的时候才会从内存里释放出来。

2.静态成员不能通过对象访问,只能通过类名直接访问。

3.静态成员(内容)在内存中只存储一份。

4.静态成员,在整个应用程序中任何一个地方都可以访问的到,所以静态成员直到程序退出后才会释放内存。而实例成员,当没有变量使用就可以被垃圾回收,回收后内存就释放了.(可以把一些常用的工具函数,封装到一个静态类中,使用方便)


现在请您再看这个简单的改动会有什么问题,我在Person中添加一个静态方法然后通过this来调用静态成员。

复制代码


public class Person
    {
        public static void Say()
        {
            this.Name = "你好";
        }

        public string Name { get; set; }
        public int Age { get; set; }
        public string Phone { get; set; }
        public static string LivePlanet { get; set; }
    }  

复制代码

可能在脱离编译器的情况下,您可能觉得this 就是Person,所以这个调用不应该会存在问题。实际上这边请您注意我用的是静态static,而静态成员访问实例成员必须要new一个实例。并且this指的是当前的对象,在使用静态成员的时候因为还没实例化一个对象,所以这个时候this无法得知自己的身份。

改动如下:

复制代码


public class Person
    {
        public static void Say()
        {
            Person p = new Person();
            p.Name = "你好";
            //this.Name = "你好";
        }

        public string Name { get; set; }
        public int Age { get; set; }
        public string Phone { get; set; }
        public static string LivePlanet { get; set; }
    }  

复制代码

这才是我们想要的结果。

那什么是静态类呢?请看如下代码:

复制代码


 public static class MyStaticClass
    {
        public static string Name { get; set; }

        public static void SayHi()
        {
            Console.WriteLine("hi");
        }
        
    }  

复制代码

观察以上代码可以看出静态类的几个特点:

1.在静态类中只能有静态成员,不能有实例成员
2.静态类不能创建对象,不能new对象

使用静态类跟使用静态成员的情景其实是一样的,即在整个应用程序中要共享数据的时候可以使用静态类。所以对于那些类中包含有大量的方法,并且类不需要创建对象的时候,可以使用静态类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态类,方法,成员 的相关文章

随机推荐

  • Windows高精度时钟

    封装几个代码 xff0c 方便以后查询和使用 Windows高精度时钟 精度 xff1a lt 1us 微秒 1 1Function 1统计一段代码的CPU时间 LARGE INTEGER freq span class token pun
  • LAMP平台配置

    Apache安装 安装httpd 96 yum y install httpd 96 启动apache服务 xff1a service httpd start验证apache的端口是否开放 xff1a ss antpl grep 80建立a
  • ROS实战篇(二)如何创建自定义的msg文件以及自己编写launch文件?

    一 如何创建自定义的msg文件 xff1f msg文件介绍 xff1a 1 msg文件是用来描述ROS中自定义的消息类型的 xff0c 可以被不同语言调用 2 msg文件以 msg 结尾 xff0c 必须存放在软件包的msg文件夹下 3 m
  • 十五、Linux驱动之USB鼠标驱动

    1 如何编写USB鼠标驱动 结合十四 Linux驱动之USB驱动分析中的分析 xff0c 我们开始写一个USB鼠标驱动 USB的驱动可以分为3类 xff1a SoC的USB控制器的驱动 xff0c 主机端USB设备的驱动 xff0c 设备上
  • kazam录制视频转码

    Ubuntu安装kazam录制视频转码问题 录制转码 录制 在ubuntu下录制视频发现录制mp4视频在windows中大部分无法打开播放只有potplayer可以 xff0c 主要是两边视频格式不支持 xff0c 为此需要进行转码 转码
  • layui实现文件分片上传

    html代码 lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt layui lt title gt lt meta
  • C++ day42 C++的其他类库(除STL外)

    STL已经提供了一个非常好的可重用代码源 xff0c STL工具可以被用来解决很多编程问题了 xff0c 但是C 43 43 还是觉得不够 xff0c 在STL之外 xff0c 也提供了一些模板类 xff0c 这些模板类基本都是用来做一件很
  • python爬虫beautifulsoup详细教程

    BeautifulSoup4是爬虫必学的技能 BeautifulSoup最主要的功能是从网页抓取数据 xff0c Beautiful Soup自动将输入文档转换为Unicode编码 xff0c 输出文档转换为utf 8编码 Beautifu
  • pandas用法详解

    一 生成数据表 1 首先导入pandas库 xff0c 一般都会用到numpy库 xff0c 所以我们先导入备用 xff1a import numpy as np import pandas as pd 2 导入CSV或者xlsx文件 xf
  • 程序员读书顺序!

    程序猿的读书历程 xff1a xx语言入门 gt xx语言应用实践 gt xxx语言高阶编程 gt xxx语言的科学与艺术 gt 编程之美 gt 编程之道 gt 编程之禅 gt 颈椎病康复指南
  • 基于STM32的倾斜仪设计(二)—— 硬件设计(2)

    2 4控制电路 本实验中选用的控制核心是STM32系列单片机 xff0c 具体型号为STM32F103R8T6 STM32F103R8T6是一款嵌入式 微控制器集成电路 xff0c 是ST旗下的一款常用的增强型系列微控制器 此芯片工作电压为
  • win32多媒体定时器

    win32多媒体定时器 因为编程需要以1ms为周期调用一个函数 xff0c 故在Windows平台上测试了一些定时器 xff0c 并进行比较 xff0c 最终选用timeSetEvent作为最终选项 几个拉跨的定时器精度 select选择模
  • 树莓派005_L298N电机控制板

    硬件接口 ENA IN1 IN2 控制左边的电机A xff0c ENB IN3 IN4控制右边的电机B 以上六个全部接GPIO口 xff0c 可通过pwm控制ENA ENB实现调速 43 12V为外接电源正极接入口 GND为外接电源负极接入
  • Vue实现Enter键查询

    单个条件 xff1a 64 keyup span class token punctuation span enter span class token punctuation span native span class token op
  • 图文详解教你在线换系统(无须U盘)

    1 先去msdn下载需要安装的系统 建议不要下载到系统盘 系统下载传送门 2 系统下载后 xff0c 双击打开找到setup xff0c 然后以管理员权限打开 3 打开windows安装界面后 xff0c 选择更改windows安装程序下载
  • 从零开始写一个图像处理程序之一(BMP彩色图转灰度图)

    图像二值化可以直接调用opencv的二值化函数去完成处理 xff0c 但是不利用OpenCV从头手写一个处理图片程序未尝不是一件有意思的事情 xff0c 就拿BMP图片为例去做一个 BMP图像 xff1a BMP xff08 Bitmap
  • 智能革命和未来社会《智能时代--大数据和智能革命重新定义未来》

    通过区块链 xff08 Block Chain xff09 在未来跟踪每一件商品从制造出来到被消费的完整行踪 比特币在一定程度上起到货币的作用 xff0c 并且成为全球很安全的洗钱工具 xff0c 源于它背后的一个技术 区块链 block即
  • Git 版本回退方法

    场景一 xff1a 如果想将代码恢复到之前某个提交的版本 xff0c 且那个版本之后提交的版本都不要了 xff0c 就可以使用 git rest 原理 xff1a git reset的作用是修改HEAD的位置 xff0c 即将HEAD指向的
  • Antd form表单的使用、设值、取值、清空值

    1 使用 this props form getFieldDecorator 34 key 34 lt Input gt 3 设值 this props form setFieldsValue key 39 123 39 2 取值 this
  • 静态类,方法,成员

    说起静态类 xff0c 你可能会联想到实例类 这两者并不难区分 xff0c 前者 静态类 只在内存中创建一个 xff0c 而后者 实例类 则是每次实例化后 xff0c 就会再内存创建一份 今天来简单聊一下静态类的理解 代码情景 xff1a