发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
先明确一下
语言: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 后自动销毁。我想应该是这样的,要不然多线程的时候不就乱了吗?
当然函数内定义的变量、对象也应该是独立的(多份),有一个调用的就产生一份。
小结
静态函数和非静态函数最大的区别是,静态的不能访问所在类的属性和内的私有变量,其他的好像都一样了。
再有就是在调用的时候会不会“复制”一遍算法(函数本身)?(我感觉是都不会复制的)。
两者需要的参数,返回值应该是独立的,一个调用者一份,一个调用者不会访问到其它调用者的参数和返回值。
不知道我的看法对不对,请大家检查一下。
来自: 昵称10504424 > 《C#》
0条评论
发表
请遵守用户 评论公约
Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用
Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用一、前言。那么下面假设已经按照要求建立好了Android的工程,并配...
.Net 面试题整理(一)
6、C#中String和string有什么区别?string是C#中的类,String是Framework的类,如果写的是string,在编译的时候编译器会把他转换为String。10、string str = null 与 string str = ""的区别...
Java基础知识面试题大集合
变量与方法。对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型...
Java 基础知识面试题大集合
Java基础知识面试题(2020最新版)
JAVA类杂记
2:类属性的初始化顺序(1)类属性:静态变量定义时的初始化 static string str ="string"(2)static块中的初始化代码,stati修饰的方法:方法,类等(3)对象属性:非静态变量定义时的初...
JAVA核心技术学习笔记| 备考
掌握Java核心技术是学习和掌握好Java技术的关键,下边分17个点对这些Java核心技术进行讲解。Java是典型的强类型语言,即必须声明变量的...
JAVA核心技术学习笔记 | 备考
JAVA核心技术学习笔记 | 备考。掌握Java核心技术是学习和掌握好Java技术的关键,下边分17个点对这些Java核心技术进行讲解。Java是典型的...
Java面试宝典:用这100个问答搞定面试官
Ans:String不是Java的原始数据类型,Java中创建一个string时,实际上是创建了Java.Lang.String类的对象,这个对象可以使用String类的所...
微信扫码,在手机上查看选中内容