博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#-静态与非静态的区别
阅读量:5303 次
发布时间:2019-06-14

本文共 1889 字,大约阅读时间需要 6 分钟。

静态和非静态的区别

1、在非静态类中,既可以有实例成员,也可以有静态成员。如下代码:

class Person    {       private static  string _name;        private char _gender;                public void M1()        {            Console.WriteLine("//我是非静态方法");        }        public static void M2()        {            Console.WriteLine(" //我是一个静态方法");        }    }

2、在调用实例成员的时候,需要使用对象名.实例成员;在调用静态成员的时候,需要使用类名.静态成员名。如下代码:

static void Main(string[] args)        {            //调用实例成员            Person P = new Person();//实例化            P.M1();//实例方法            Person.M2();//静态方法            Console.WriteLine();            Console.ReadKey();        }

总结

1)静态成员必须使用类名去调用,而实例成员使用对象名调用。如下代码:

Person P = new Person();//实例化 P.M1();//实例方法 Person.M2();//静态方法

2)静态函数中,只能访问静态成员,不允许访问实例成员。如下代码:

class Person    {        private static  string _name;        private char _gender;        public static void M2()        {            _name = "jingtai";            _gender = 'f';//此行报错,不能引用非静态字段            Console.WriteLine(" 我是一个静态方法");        }    }

 

3)实例函数中,既可以使用静态成员,也可以使用实例成员。如下代码:

class Person    {        private static  string _name;        private char _gender;        public void M1()        {            _name = "feijingtai";            _gender = 'm';            Console.WriteLine("我是非静态方法");        }            }

 

4)静态类中只允许有静态成员,不允许出现实例成员。否则会报错,如下代码:

static class Person    {        private static  string _name;        //注释掉的部分代码会报错(不能在静态类中声明实例成员)        //private char _gender;        //public void M1()        //{        //Console.WriteLine("我是非静态方法");        //}        public static void M2()        {            Console.WriteLine(" 我是一个静态方法");        }    }

 

使用:

1)、如果你想要你的类当做一个"工具类"去使用,这个时候可以考虑将类写成静态的。(工具类的意思就是,像工具一样经常需要用到的类,比如:console类,经常需要用来在控制台输入输出)
2)、静态类在整个项目中,谁都可以调用静态类,所以静态类在整个项目中是资源共享。

 

拓展内容:

内存五大块中的三大块:堆, 栈, 静态存储区域

只有在程序全部结束之后,静态类才会释放资源。通过(GC Garbage Collection垃圾回收器)释放资源

转载于:https://www.cnblogs.com/ImOrange/p/10534102.html

你可能感兴趣的文章
bzoj千题计划140:bzoj4519: [Cqoi2016]不同的最小割
查看>>
【Scala】Scala之Packaging and Imports
查看>>
【译】Java编程动态性,第 2部分: 反射简介
查看>>
png8、16、24、32位的区别
查看>>
使用input range滑块,控制元素transform rotate旋转样式
查看>>
vue.js 配置axios 用来ajax请求数据
查看>>
Delphi基础语法
查看>>
ajax的用法 资料
查看>>
端口映射
查看>>
Java操作Xml
查看>>
HDU1003
查看>>
week one(3)—Gradient descent
查看>>
hadoop入门笔记MapReduce简介(三)
查看>>
Ubuntu 16.04设置开机关机时显示命令详细信息不显示进度条Logo
查看>>
Mac安装IntelliJ IDEA时快捷键冲突设置
查看>>
Mac拷贝/复制文件夹路径快捷键
查看>>
冒泡型事件运行顺序
查看>>
video小窗播放
查看>>
Xcode常用快捷键
查看>>
HTTPS
查看>>