C#static关键字

静态字段
某些特定数据在内存中只有一份,并且可以被类的所有实例对象共享。(例如某校学生共享一个学校名称,不需要每个学生对象占用内存创建学校名称。)调用方法:类【名.成员名】

代码:

        static void Main(string[] args)
        {
            SchoolName s1 = new SchoolName();//实例化对象
            SchoolName s2 = new SchoolName();
            Console.WriteLine("s1同学毕业于:" + SchoolName.schoolName);//访问成员:【类.成员名】
            Console.WriteLine("s2同学毕业于:" + SchoolName.schoolName);
            Console.ReadKey();
        }
        class SchoolName
        {
            public  static string schoolName="五道口职业技术学院";
            //类中定义public类型的静态字段;不能定义private类型否则无法访问
        }

在这里插入图片描述
拓展①:调用static成员不能通过对象来访问,否则会报错。
在这里插入图片描述

静态属性
用static修饰的属性被称为静态属性,它可以读写静态字段的值,调用方法:【类名.属性名】

代码:

		static void Main(string[] args)
        {
            Student s1 = new Student();
            Student s2 = new Student();
            Console.WriteLine("s1同学毕业于:" + Student.SchoolName);//通过静态属性调用字段
            Console.WriteLine("s2同学毕业于:" + Student.SchoolName);
            Console.ReadKey();
        }
        class Student
        {
            private static string schoolName = "五道口职业技术学院";//定义private静态字段
            public static string SchoolName//通过get/set属性对字段进行赋值
            {
                get
                {
                    return schoolName;
                }
                set
                {
                    schoolName = value;
                }
            }
        }

在这里插入图片描述

静态方法
在不需要实例化对象的情况下可以直接调用类中的方法,能够让对象与方法不绑在一起调用方法:【类名.方法名】

代码:

		static void Main(string[] args)
        {
            Person.Print();
            //static方法调用无需创建对象,直接通过【类.方法名】直接调用
            Console.ReadKey();
        }
        class Person//创建类
        {
            public static void Print()//类中有一个普通方法
            {
                Console.WriteLine("静态方法【类.方法名】直接调用。");
            }
        }

在这里插入图片描述
拓展①:在静态方法中可以直接访问静态方法

        static void Main(string[] args)
        {
            Person.Test();
            //static方法调用无需创建对象,直接通过【类.方法名】直接调用
            Console.ReadKey();
        }
        class Person//创建类
        {
            public static void Test()
            {
                Console.WriteLine("Test静态方法");
                Test1();
                //静态方法中访问Test1静态方法
            }
            public  static void Test1()
            {
                Console.WriteLine("Test1静态方法");
            }
        }

在这里插入图片描述

拓展②:在非静态方法中可以访问静态方法
在这里插入图片描述

		static void Main(string[] args)
        {
            //Person.Test();
            //static方法调用无需创建对象,直接通过【类.方法名】直接调用
            Person p = new Person();
            p.Test2();//通过对象调用类中普通方法
            Console.ReadKey();
        }
        class Person//创建类
        {
            public static void Test()
            {
                Console.WriteLine("Test静态方法");
                //静态方法中访问Test1静态方法
            }
            public  static void Test1()
            {
                Console.WriteLine("Test1静态方法");
            }
            public void Test2()
            {
                Console.WriteLine("Test2非静态方法");
                Test();
                Test1();
                //非静态方法中可以调用静态方法
            }
        }

在这里插入图片描述

拓展③:在静态方法中不能访问非静态方法
在这里插入图片描述
拓展④:在非静态方法中可以访问非静态方法

		static void Main(string[] args)
        {
            //Person.Test();
            //static方法调用无需创建对象,直接通过【类.方法名】直接调用
            Person p = new Person();
            p.Test2();//通过对象调用类中方法
            Console.ReadKey();
        }
        public void Test2()
           {
               Console.WriteLine("Test2非静态方法");                
               Test3();
               //非静态方法中能够访问非静态方法
           }
        public void Test3()
           {
               Console.WriteLine("Test3非静态方法");
           }

在这里插入图片描述
总结:
静态方法能够在非静态方法和静态方法中被访问
非静态方法能够通过非静态方法访问,不能通过静态方法访问

静态类—永远不需要实例化
当类中全部成员为静态时,就可以把这个类声明为静态类
特点:
①:不能实现任何接口
②:内部所有成员均为静态
③:静态类是密封的,不能被继承

格式:

static class{
            //成员均为静态
        }

代码:

       static void Main(string[] args)
        {
            Student.Print();//直接访问静态方法
            Console.ReadKey();
        }
        static class Student//静态类
        {
            private static string name = "Aucl";//静态字段
            public static void Print()//静态方法
            {
                Console.WriteLine("我的名字叫:" + name);
            }
        }

在这里插入图片描述
在这里插入图片描述

静态构造方法
与构造方法功能一样,静态构造方法的作用同样是初始化静态成员。调用方法:类名.方法名

代码:

        static void Main(string[] args)
        {
            Person.Print();//调用静态方法
            Console.ReadKey();
        }
        class Person//类
        {
            private static string name;
            private static string tel;
            static Person()//静态构造函数初始化静态成员
            {
                name = "Aucl";
                tel = "001";
            }
            public static void Print()//定义静态方法
            {
                Console.WriteLine("我的名字是:" + name + ",电话号码:" + tel);
            }
        }

注意:
①:一个类只有一个构造方法,否则会报错。
在这里插入图片描述
②:该静态构造方法没有任何修饰符,也没有参数。
格式:

static 类名()
{
	//初始化静态成员
}

在这里插入图片描述
③:静态构造方法可以在静态类中也可以在非静态类中。
④:程序会在创建第一个实例或者引用任何静态成员之前完成类中静态成员初始化。(???)
测试

单例模式
概念:编程过程中一些典型问题,需要特定的代码结构,经过优化后,形成的一种编程风格来解决问题的思想行为:设计模式。单例模式是C#的设计模式,它在设计类时,需要程序运行期间只存在一个实例对象。

单例模式中类的格式:

        //类 对象名 = 类.public方法
		//创建对象
        /*单例模式-->【设计类时,需要保证整个程序运行期间只有一个实例对象】
         class 类名
         {
             private static  类名 变量 = new 类();
             //类内部创建该类的实例对象,使用私有private的静态变量引用
             private 类(){}  
             //创建无参的构造方法
             public static 类名 方法名()
             {
                return 变量;
             }
             //定义静态方法返回实例对象(静态只能访问不能修改)
         }

代码:

        static void Main(string[] args)
        {
            Single a = Single.SingleMethod();
            Single b = Single.SingleMethod();
            //创建对象,★在单例模式的类中已经实例化对象,所以我们直接通过类.方法放回实例化对象即可
            Console.WriteLine(a== b);//最终输出:True
            Console.ReadKey();
        }
        class Single// 单例模式的类名可以随意命名
        {
            private static Single single = new Single();//private的实例对象
            private Single() { }                        //private的无参构造函数
            public static Single SingleMethod()        //public类型的静态方法,返回类内部的实例对象
            {
                return single;
            }
        }

在这里插入图片描述

清明时节雨纷纷,路上行人欲断魂
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AuCl.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值