C#基础-静态类&静态类成员

         在c#中没有全局变量的概念,变量的作用域总在声明它的地方。若想让达到作用域全局的效果可以通过静态来实现。一般情况下静态类会用于单例、公共工具类或工具方法,如GameTool、MathTool等。

将某类或某字段定义为静态后,在第一次调用时c#会将其从内存上分配到静态区域,他不再参与c#内存回收机制,一直存在不会销毁 直到程序结束关闭释放内存。

关键字:静态:static  

目录

 静态类定义:

静态构造函数:

静态字段&方法:

静态调用:

实例代码:


 静态类定义:

        将类定义为静态后,即不再拥有实例化的特性,不可再拥有并使用构造函数进行多个对象实例化。否则违反了全局唯一变量的概念。

静态类中的类成员必须全是静态的,静态类不能拥有实例化成员。

格式:访问权限修饰符 + static + class + 类名 + {  类主体 }

静态构造函数:

        静态构造函数存于各种类中并只存在一个,在类被调用或实例化时第一个执行,只执行一次,无参无返无访问权限修饰符。

格式:static + 构造函数名(与类同名) + (无参) + {} 

 在静态类中只会有静态构造函数,而普通类和抽象类可以存在其他构造函数和静态构造函数。

静态字段&方法:

        静态成员可以存于静态类中也可以存于普通类中,在访问权限修饰符后加上static关键字即可,在当前类的静态方法中,是无法直接引用本类中其他非静态成员的。

静态调用:

        调用静态成员只需要使用 类名.静态成员名,无需再使用实例对象调用。

实例代码:

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            MyClass1._name="小明";//调用静态类的静态字段并赋值
            //执行 静态无参构造 输出:MyClass1 执行静态构造函数

            MyClass1.Func1();//调用静态类的静态方法 输出:MyClass1.Func1
            //无静态无参构造的输出 

            MyClass2 myClass2 = new MyClass2();
            //实例化一个对象 new()调用了一个无参构造函数
            //发现静态无参构造最先执行 再执行实例化构造函数

            MyClass2._id=1;//调用公开静态成员 通过类名.

            MyClass2.Func2();//调用公开静态方法 通过类名.

        }
    }

    public static class MyClass1//静态类
    {
        public static string _name;//访问权限修饰符为 公开
        private static int _age;//访问权限为私有 外部获取不到仅在当前类中可访问

        //int _id;//报错:不能在静态类中声明实例成员
        //void Func0() { }//报错:不能在静态类中声明实例成员

        static MyClass1()
        {
            Console.WriteLine("MyClass1 执行静态构造函数");
        }

        //public MyClass1() { }//报错:静态类不能拥有实例构造函数

        public static void Func1()
        {
            Console.WriteLine("MyClass1.Func1");
            _age = 10;//类成员在类内部可访问当前类私有成员
        }
    }

    public class MyClass2//普通对象类
    {
        public static int _id;//公开静态成员

        //静态构造函数只会调用一次
        static MyClass2() { Console.WriteLine("MyClass2 执行静态构造函数"); }
        //实力构造函数每次实例化时都会调用一次构造函数
        public MyClass2() { Console.WriteLine("MyClass2 执行实例构造函数"); }

        public static void Func2()//实例类可以包含静态成员
        {
            Console.WriteLine("MyClass2.Func2");
        }
    }
}

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值