Unity-C#基础学习09

第九节: 单例、静态类 (抱歉,周末休息了两天,所以停更了,今天周一上班啦,加油,又是元气满满的一天呢  3.1号,好的开端。最近写文章也是在整理以前学习的笔记,如有什么遗漏请大家多多指教,蟹蟹啦!!)

1.单例

学习单例,首先要学习 如何实现单例模式?

单例设计模式:

程序运行期间,确保一个类只有一个实例。

目的:降低对象的耦合度,保证一个类只有一个实例,并且这个实例易于访问

实现步骤:

1)构造方法设为private

2)内建静态实例

3)静态构造方法给实例做初始化

 //单例模式
    public class Singleton
    {
        private static Singleton instance;
        //内建静态实例
        private Singleton ()
        {
        }
        //构造方法必须设为私有
        public static Singleton Instance {
            get {if (instance == null) {
                    instance = new Singleton ();    //为实例初始化
                }
                return instance;
            }
        }

        static Singleton ()
        {
           Debug.Log ("Static Singleton");
        }

        public void SaySingleton ()
        {
            Debug.Log ("Singleton");
        }
    }

2.静态类

静态类成员只能由类来调用。静态类不能实例化,所以内部只允许有静态成员或caonst修饰的常量。

 一、用static修饰的类叫做静态类

特点:

1)仅包含静态成员和const修饰的常量

2)不能被实例化

3)是密封的(默认已经是sealed,不能再用sealed修饰)

4)有静态构造方法(函数),但静态构造方法必须是无参数的

总结:静态类是一种工具类,不能实例化,不能继承。静态构造方法用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。

public sealed class Time                        //静态构造方法
    {
        public static float dealTime;
        //用static修饰的类称为静态类。

        static Time ()                         //不能带访问修饰符,不能带参数,不能重载
        {
            dealTime = 0.4f;                   //如果不写这句话,系统会为静态变量赋一个默认值
            Debug.Log ("static Time().");
        }
    }

接下来着重进一步了解一下静态类:

二、静态构造方法

1)静态构造方法用于初始化任何静态数据,或用于执行仅需执行一次的特定操作

2)在创建一个实例或者引用任何静态成员之前,将自动调用静态构造方法

3)静态构造方法不能带访问修饰符

三、静态类的使用场景

一些公有的变量或者方法可以放在静态类中,以方便其他类来使用。

例如:一些排序算法、或者游戏中背景音乐的管理,或者场景管理,可以把静态类看作一个工具类,任何地方只要需要都可以调用该类里面的成员,提高开发效率

缺点:项目中如果存在静态类较多时,会导致大量内存被占用无法释放,所以尽量少用。

 

加上一段以前写过的一个案例吧,直接上代码,haha:

using System;

namespace ke
{
    //打印纸张的类型
    public enum PaperType
    {
        A4,
        A5
    }

    //打印机类,单例类
    public class Printer
    { 
        #region 单例

        //1、私有的静态实例
        private static Printer instance;
        //2、私有构造方法
        private Printer ()
        {

        }
        //3、静态属性
        public static Printer Instance {
            get {
                if (instance == null) {
                    instance = new Printer ();
                }
                return instance;
            }
        }

        #endregion

        //打印机的IP地址
        private static string IP = "192.168.0.1";
        //打印数量
        private static int printCount;
        //纸张类型
        private static PaperType paper;
        //用来判定是否连接打印机成功
        static bool b = false;


        //连接打印接的方法
        public static void ConnectPrinter (
            string _ip, PaperType _paper)
        {
            if (_ip == IP) {
                //连接成功
                b = true;
                Debug.Log ("连接成功,你现在可以开始" +
                    "打印了,打印纸的类型为{0}", _paper);
            } else {
                b = false;
                Debug.Log ("连接打印机失败,本台打印机" +
                    "的IP为{0},请重新设置!", IP);
            }
        }
        //打印方法
        public static void Print (int n)
        {
            if (b == true) {
                printCount = n;
                Debug.Log ("正在打印,打印的张数是:{0}", 
                    printCount);
            } else {
                Debug.Log ("不能打印,因为没有连接成功");
            }
        }

    }


}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值