求解~ 个人现在弄了C#不到1年。。很多东西不是很明白。。比如说全局变量和局部变量效率方面有多少差异。。一个全局=几个局部还有一些类似的问题。。想问下各位大大。。我想知道这些东西该学学什么。。看看什么书 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 人现在弄了C#不到1年。。很多东西不是很明白。。 比如说全局变量和局部变量效率方面有多少差异。。一个全局=几个局部 还有一些类似的问题。。 想问下各位大大。。我想知道这些东西该学学什么。。看看什么书1:严格地说:在C#中没有全局变量。如果说需要有类似效果的东西,那么就是:公有的,静态变量应该可以算是全局变量。但在使用这个全局变量时仍然需要引用这个命名空间。2:就数据成员而言全局变量与局部变量在效率上本身没有任何差异。一般地来说,全局变量是存储在数据段中,在进程被加载后地址是静态的;局部变量是动态的在存储在栈中的,随着函数的调用和返回生成和消失,在他们的生存时间内,他们的地址也是静态的;所以从这个效率上一炕头他们是基本上没有区别的。不过这并不是说你调用任何成员都没有效率上的区别。简单地说,调用值类型的对象,你可以直接通过我上面说的静态地址可以得到对象的值;而调用引用类型的对象,你得到的只是它的一个“指针”,需要通过这个指针,找到实际对象的内存位置查找数据。比如:public void TestFunc(){ int i=1; string s="abc";}这段代码中i是值类型,它直接存在于栈中;而s是引用类型,它的引用位于栈中,访问时通过这个引用找到堆中的某一块内存表示它的值“ABC”。从这点的效率上来说肯定是i>s,但产生这个的原因并不是由于全局与局部变量的区别。当然,对于OO来说,虚函数,重载肯定会影响效率上的变化,但这些都是函数成员了而非数据成员。具体的内容,我觉得可以参考一下《Essencial C#》,呵呵……其实我没有仔细看过这本书,我是看过《Essencial C++》,但就最终的面向对象的编译器和内存设计而言,C#与C++应当差不多的。 你这是一个什么概念?什么叫用完了?什么叫恢复初始值?我的理解中,除了对象刚刚生成的那一次,叫初始值,事实上这个初始值只是一个可以接受的起始状态罢了。第一次初始化变量之后的任何变化应该都是受程序逻辑的影响,在它允许的各个状态中迁移,除非这个程序停止不存在说“用完”的情况。举个例子:有一个工厂类,该工厂类内部有一个静态成员用于计数,表示一共生成了多少个相应工厂的类对象。pbulic class XXFactory{ private static int count =0; public XX CreateObject() { count++; return new XX(); } public void Reset() { count = 0; }}对这个类中的count来说,它的初始值就是0。它也表示了一个合法的状态:工厂没有创建任何一个对象。在CreateObject方法中,每创建一个新对象,Count++,表示有新的对象的生成了。而在Reset方法,工厂类重新复位,Count=0。无论是哪一种操作,除非程序终止,没有Count++“用完了”的时候。 楼主如果学了1年C#还问这样的问题,貌似确实看书看少了网上有本 你必须知道的.NET 电子书,楼主可以看看 我建议别贪多吧,把《C# 高级编程》第4版之类的前面讲语法部分的看完,看仔细一点。有不明白的多查资料,多问再说。书再多没看明白也没用。其实Essencial C#不错,C#高级编程也不错,还有本.NET组件程序设计也不错,关键是你要能看进去,看明白。老实说,即使有一些垃圾书,他也有精华,有价值的东西就看你能不能发现了。 如何查找表中的一个固定字段的固定值?!? 关于打印之后的操作,在线等。。。 有人知道datalist里的按钮怎么通过SESSION来控制显示的么? 在贵站下载了c#记事本程序,接口出现了问题,请高手解决一下 c# winform:datagridview只显示部分数据 请教:c#程序运行时控件不见了,不管是加label还是button都一样。 GDI的问题 关于socket 跨域连接 寻求正则表达式的资料? 一个 WinForm 使用第 3 方控件后的部署问题: C# 98系统 如何获取 mac 地址 我想做一个数据库映射的东西,请各位高手帮忙
比如说全局变量和局部变量效率方面有多少差异。。一个全局=几个局部
还有一些类似的问题。。
想问下各位大大。。我想知道这些东西该学学什么。。看看什么书1:严格地说:在C#中没有全局变量。
如果说需要有类似效果的东西,那么就是:公有的,静态变量应该可以算是全局变量。但在使用这个全局变量时仍然需要引用这个命名空间。2:就数据成员而言全局变量与局部变量在效率上本身没有任何差异。
一般地来说,全局变量是存储在数据段中,在进程被加载后地址是静态的;
局部变量是动态的在存储在栈中的,随着函数的调用和返回生成和消失,在他们的生存时间内,他们的地址也是静态的;
所以从这个效率上一炕头他们是基本上没有区别的。不过这并不是说你调用任何成员都没有效率上的区别。
简单地说,调用值类型的对象,你可以直接通过我上面说的静态地址可以得到对象的值;而调用引用类型的对象,你得到的只是它的一个“指针”,需要通过这个指针,找到实际对象的内存位置查找数据。
比如:
public void TestFunc()
{
int i=1;
string s="abc";
}
这段代码中i是值类型,它直接存在于栈中;而s是引用类型,它的引用位于栈中,访问时通过这个引用找到堆中的某一块内存表示它的值“ABC”。
从这点的效率上来说肯定是i>s,但产生这个的原因并不是由于全局与局部变量的区别。当然,对于OO来说,虚函数,重载肯定会影响效率上的变化,但这些都是函数成员了而非数据成员。具体的内容,我觉得可以参考一下《Essencial C#》,呵呵……
其实我没有仔细看过这本书,我是看过《Essencial C++》,但就最终的面向对象的编译器和内存设计而言,C#与C++应当差不多的。
我的理解中,除了对象刚刚生成的那一次,叫初始值,事实上这个初始值只是一个可以接受的起始状态罢了。
第一次初始化变量之后的任何变化应该都是受程序逻辑的影响,在它允许的各个状态中迁移,除非这个程序停止不存在说“用完”的情况。举个例子:
有一个工厂类,该工厂类内部有一个静态成员用于计数,表示一共生成了多少个相应工厂的类对象。
pbulic class XXFactory
{
private static int count =0;
public XX CreateObject()
{
count++;
return new XX();
}
public void Reset()
{
count = 0;
}
}
对这个类中的count来说,它的初始值就是0。它也表示了一个合法的状态:工厂没有创建任何一个对象。
在CreateObject方法中,每创建一个新对象,Count++,表示有新的对象的生成了。
而在Reset方法,工厂类重新复位,Count=0。
无论是哪一种操作,除非程序终止,没有Count++“用完了”的时候。
书再多没看明白也没用。其实Essencial C#不错,C#高级编程也不错,还有本.NET组件程序设计也不错,关键是你要能看进去,看明白。
老实说,即使有一些垃圾书,他也有精华,有价值的东西就看你能不能发现了。