C#中关于值类型和引用类型的困惑
c#中去掉了指针类型,但是在某些操作的时候会有点困惑,比如说 object A;属于引用类型,这个理解过来就是产生一个指向A的指针,object类型的内存并没有分配,如果要使用A的话还需要A=new object(); 如果是值类型的话就不需要自己分配堆空间,比如 int i;这个i就已经分配了4字节的内存。
那么比如说
void f(string s)
{
s="eee";
}
string s="sss";
f(s);
这里运行出来 外面的s是没有改变的,我的理解引用类型在形参那里是不会创建新的内存空间,就好比C++里面的void f(string& s); 但是结果并不是这样,请高手们指点迷津~~~~~
理解错误,应该是c++里面的
void f(string * s);
大多数人认为C#是没有指针的,其实C#里面到处都是指针,只要是class类型的,就是指针。
void f(ref string s)
{
s="eee";
}
string s="sss";
f(s);
如果你把“引用”看作c的指针,会得到很多错误的概念。根本是不一样的概念。
在c#中(以及在.net中),默认传递的就是对象引用(一种实体)。如果一定要用c++来比,类比为两个**号还有点类似。在.net中,所谓“指针”是一种复杂的对象实体,因此它要比c/c++高级得多。
而加ref关键字,只是表示在函数结束时要把堆栈上弹出的引用赋值给原来的变量(否则就直接丢弃了)。
例如我们可以打印对象变化的轨迹:C# code:
void f(string s)
{
var m = "eee"
相关问答:
有个winform程序,使用c#+mysql,需要在一个窗体设置mysql自动删除功能,包括自动删除多少天之前的数据以及是否开启自动删除功能,我程序退出后,还怎么控制Mysql自己删除啊?是不是要用mysql的event来实现?c#可以调用mysq ......
21cn的邮箱,在outlook配置后可以正常收发邮件,可是我写在C#中就不行,换成其它邮箱,163很早注册的。可以发送。查了很久,没有找到原因,请高手帮忙解答。。。小弟,谢了。。代码如下:
private void SendMail ......
可能因为工作的原因 接触数据库这块比较少,之前都是做程序这块,数据库这块都有专门的人来做 分工都很明细 所以对数据库这一块完全不了解。前段时间 去面试了几家公司 几乎都是在数据库这块挂掉的 连个简单的SQ ......
用"服务器控件名.Style.Add("display","")可以给这控件添加CSS,怎么样才能给读出来呢?
怎么都没人帮忙啊
人都死哪去了
控件ID.Style[HtmlTextWriterStyle.BackgroundColor]
控件 ......