静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)
2007-04-05 16:48 金色海洋(jyk) 阅读(4520) 评论(3) 编辑 收藏 举报先明确一下
语言: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 后自动销毁。我想应该是这样的,要不然多线程的时候不就乱了吗?
当然函数内定义的变量、对象也应该是独立的(多份),有一个调用的就产生一份。
小结
静态函数和非静态函数最大的区别是,静态的不能访问所在类的属性和内的私有变量,其他的好像都一样了。
再有就是在调用的时候会不会“复制”一遍算法(函数本身)?(我感觉是都不会复制的)。
两者需要的参数,返回值应该是独立的,一个调用者一份,一个调用者不会访问到其它调用者的参数和返回值。
不知道我的看法对不对,请大家检查一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!