在C#中静态函数和实例函数的区别?

如题所述

静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)先明确一下语言: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、静态函数,直接调用不需要实例化,也没有“属性”当然函数内定义的变量、对象也应该是独立的(多份),有一个调用的就产生一份。小结静态函数和非静态函数最大的区别是,静态的不能访问所在类的属性和内的私有变量,其他的好像都一样了。再有就是在调用的时候会不会“复制”一遍算法(函数本身)?(我感觉是都不会复制的)。两者需要的参数,返回值应该是独立的,一个调用者一份,一个调用者不会访问到其它调用者的参数和返回值。不知道我的看法对不对,请大家检查一下。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-04-21
静态变量 静态对象 静态函数和非静态函数的区别。(我的理解,大家看看对不对)先明确一下语言: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、静态函数,直接调用不需要实例化,也没有“属性”
当然函数内定义的变量、对象也应该是独立的(多份),有一个调用的就产生一份。
小结静态函数和非静态函数最大的区别是,静态的不能访问所在类的属性和内的私有变量,其他的好像都一样了。
再有就是在调用的时候会不会“复制”一遍算法(函数本身)?(我感觉是都不会复制的)。
两者需要的参数,返回值应该是独立的,一个调用者一份,一个调用者不会访问到其它调用者的参数和返回值。

静态构造函数是最早被调用的,只要有静态访问,那么就先调用静态构造函数。其他非静态构造函数会在调用完毕静态的成员之后才被调用。

所以一般静态构造函数用来为静态成员初始化,或者作为单件模式中创建对象的唯一入口。

例如:

private static GoodsManager s_Instance;

public static GoodsManager Instance
{
get{return s_Instance;}
}
static GoodsManager()
{
s_Instance = new GoodsManager();
}
private GoodsManager()
{ }

在访问类的静态成员的时候,系统会最先调用静态构造函数static GoodsManager(),在构造函数中初始化了静态变量。
相似回答