前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)

静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)

作者头像
用户1174620
发布2018-02-07 16:40:10
1.8K0
发布2018-02-07 16:40:10
举报

先明确一下

语言:asp.net C#

1、静态变量: static string str1 = "1234";

2、静态对象 static SqlConnection cn = new SqlConnection();

3、静态函数 class aa {     public static string test(string str)     {         return str & "111";     } }

调用

aa.test("123");

4、非静态函数(就是需要实例化的) class aa {     public string test(string str)     {         return str & "111";     } }

调用 aa a1 = new aa(); a1.test("123");

其中静态变量和静态对象是比较好理解,也没有什么争论。争论最大的是静态函数这一块。

1、静态变量。在内存里是应该只有一份,不管是不是多线程,是不是多用户同时访问,静态变量只占用一份内存。

2、静态对象和静态变量也差不多,只有一份。

个人认为 SqlConnection 是不应该只用静态的,除非你的网站没有(或很少)并发访问的情况。 否则就很容易出现千军万马过独木桥的现象。挤不过去了就会瘫痪的。而且连接池也就无用武之地了。

3、非静态函数,就是在调用的时候必须先实例化,然后才能访问到。

实例化到底做了什么呢?是不是把整个类都“复制”了一份供调用者使用呢? 类的属性、函数的参数、返回值,这些应该是在实例化的时候产生一份,供调用者单独使用,其他的调用者是绝对访问不了的。 那么函数(或者说是类)呢?也又生成了一份吗?还没有弄清楚。

4、静态函数,直接调用不需要实例化,也没有“属性”

没有实例化,函数是一份的,多少人调用,都是这一份。那么函数用的参数和返回值呢?也是只有一份吗?

这个好像就不是了,应该有多份,有一个调用的就产生一份,return 后自动销毁。我想应该是这样的,要不然多线程的时候不就乱了吗?

当然函数内定义的变量、对象也应该是独立的(多份),有一个调用的就产生一份。

小结

静态函数和非静态函数最大的区别是,静态的不能访问所在类的属性和内的私有变量,其他的好像都一样了。

再有就是在调用的时候会不会“复制”一遍算法(函数本身)?(我感觉是都不会复制的)。

两者需要的参数,返回值应该是独立的,一个调用者一份,一个调用者不会访问到其它调用者的参数和返回值。

不知道我的看法对不对,请大家检查一下。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2007-04-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档