易截截图软件、单文件、免安装、纯绿色、仅160KB

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"


相关问答:

c#控制Mysql 实现自动删除功能 - .NET技术 / C#

有个winform程序,使用c#+mysql,需要在一个窗体设置mysql自动删除功能,包括自动删除多少天之前的数据以及是否开启自动删除功能,我程序退出后,还怎么控制Mysql自己删除啊?是不是要用mysql的event来实现?c#可以调用mysq ......

C#发邮件21cn

21cn的邮箱,在outlook配置后可以正常收发邮件,可是我写在C#中就不行,换成其它邮箱,163很早注册的。可以发送。查了很久,没有找到原因,请高手帮忙解答。。。小弟,谢了。。代码如下:
private void SendMail ......

sql小小的疑问 - .NET技术 / C#

可能因为工作的原因 接触数据库这块比较少,之前都是做程序这块,数据库这块都有专门的人来做 分工都很明细 所以对数据库这一块完全不了解。前段时间 去面试了几家公司 几乎都是在数据库这块挂掉的 连个简单的SQ ......

怎么用C#读取服务器控件CSS样式 - .NET技术 / ASP.NET

用"服务器控件名.Style.Add("display","")可以给这控件添加CSS,怎么样才能给读出来呢?
怎么都没人帮忙啊

人都死哪去了

控件ID.Style[HtmlTextWriterStyle.BackgroundColor]
控件 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号