Unity开发之C#基础-静态类型

前言

说是隔三天 一隔隔三周哇。原谅我,上班有点忙 下班有点懒 实在没更 今天自己实在看不下去了 每天都会有人通过文章关注我 看着日益渐多的粉丝 实在不好意思在拖了 这次必须下定决心继续更新了。言归正传,今天所要学习的基础是“静态类型”

静态类型的定义

  1. 当用static修饰符声明成员叫静态成员,静态成员属于类,为这个类的所有
    实例所共享。静态成员只能由类来调用,不能由对象调用。
  2. 不用static修饰符声明成员,称为实例成员,实例成员属于类的实例。
    2.1 非静态方法在类外部使用实例名访问。
    2.2 静态成员在类外部使用类名访问。

其实在我们最近常常书写的很多代码中 都可以看到“静态”这个定义的调用 比如:
在这里插入图片描述
我们常常用到的输出函数 其实就是一个静态方法的示例vs当中 可以使用”ctrl+鼠标左键“点击WriteLine方法 我们可以看到这个类的源代码:
在这里插入图片描述
我们可以看到很多的重载 和 static关键字修饰的Write Line方法

那么 我们可以自己创建一个类 来定义静态函数和属性 以便我们更能了解它的作用:

  1. 定义类Student 包含一个静态变量 一个非静态变量 还有一个属性
  2. 包含两个静态函数 和 一个非静态函数

在这里插入图片描述
我们去测试一下代码:
在这里插入图片描述
其实我们发现 好像和普通的没有修饰的 并没有什么太大的区别,那么我们继续完成剩下的再看看:
在这里插入图片描述
根据这些规则 我们可以总结一下静态类型的意义:

静态类型的使用

  1. 静态方法其实就是普通函数。

  2. 静态变量其实就是全局变量。

  3. 静态变量和静态方法是属于某一个类,而不属于类的对象。

  4. 静态变量和静态方法的引用直接通过类名引用。

  5. 静态成员方法中使用this也是错误的。

  6. 在静态方法中不能调用非静态的方法和引用非静态的成员变量。反之,则可以。

  7. 常量(const)默认就是静态的。

    在这里插入图片描述

静态类

  1. 静态类和类成员用于——创建无需创建类的实例就能够访问的数据和函数
  2. 类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。
  3. 静态类的主要功能如下:
    3.1 它们仅包含静态成员。
    3.2 它们不能被实例化(不能创建对象)。
    3.3 它们是密封的,因此不可以被继承。
    3.4 它们不能包含实例构造函数。但仍可声明静态构造函数以分配初始值或设置某个静态状态。

静态类的使用场合

  1. 使用静态类作为不与特定对象关联的方法的组织单元。此外,静态类能够使您的实现更简单、迅速,因为您不必创建对象就能调用其方法。以一种有意义的方式组织类内部的方法(例如System 命名空间中的 Math 类的方法)是很有用的。

  2. 假设有一个静态公司类 CompanyInfo,它包含用于获取有关公司名称和地址信息的下列方法。
    在这里插入图片描述
    调用:
    在这里插入图片描述

总结

静态修饰在很多地方都有很大的用处 后续我们讲解设计模式时 会有一种设计模式与静态有着密不可分的关系


以上就是对”静态“的全部讲解 山高路远 下期再会!
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C# 中实现单例模式有多种方式,其中一种常见的方式是使用静态变量。下面是一个在 Unity 中使用 C# 实现单例的示例代码: ```csharp public class MySingleton : MonoBehaviour { private static MySingleton instance; public static MySingleton Instance { get { if (instance == null) { instance = FindObjectOfType<MySingleton>(); if (instance == null) { GameObject go = new GameObject(); go.name = "MySingleton"; instance = go.AddComponent<MySingleton>(); DontDestroyOnLoad(go); } } return instance; } } private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } } ``` 这个示例中,我们在类中定义了一个静态变量 instance,用于存储单例对象。在 Instance 属性中,我们首先检查 instance 是否为 null,如果是,就通过 FindObjectOfType 方法查找场景中是否已经存在 MySingleton 实例,如果存在就直接赋值 instance,否则就创建一个新的 GameObject,并添加一个 MySingleton 组件,再将其赋值给 instance。最后,我们返回 instance。 在 Awake 方法中,我们再次检查 instance 是否为 null,如果是,就将当前实例赋值给 instance,并调用 DontDestroyOnLoad 方法,以便在场景切换时不被销毁。如果 instance 不为 null,说明已经存在 MySingleton 实例了,我们就销毁当前实例。 使用时,我们可以通过 MySingleton.Instance 来获取单例对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想吃烤地瓜.

高抬小手一点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值