易截截图软件、单文件、免安装、纯绿色、仅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# 语法导出XML 的编码设置

我现在做接口导出,.NET平台,开发语言C#,想导出XML的文本格式。
想得到 <?xml version="1.0" encoding="GBK"?> 
的编码格式!怎么设置?谢谢!急!


只要保存为xml格式, ......

C#和数据库SQL - MS-SQL Server / 基础类

我们C#做一个窗体 往数据库里插入数据
  SqlConnection cn = new SqlConnection("Data Source=20090713-1752\\SQLEXPRESS;Initial Catalog=goods;Integrated Security=True");
  ......

请问如何取XML的属性值 - .NET技术 / C#

我有一个XML.想取
<Portfolio _Name="XXXX" _Id="AUD" >
中的属性_Id的值.但是用下面的语句好象不行.
 XmlNode CId = xdoc_Msg.SelectSingleNode("/Portfolio");
&n ......

C#中DES加密在PHP中解密

我写了一个C#应用程序,需要向PHP页面提交一段加密的数据。C#用的DES加密算法。算法如下:C# code:
public class Crypt
{
/// <summary>
/// 创建Key
/// </su ......

根据节点名称循环删除xml节点.txt - .NET技术 / C#

内容如题。。在C#里改如何写呢?
本来思路是先比对节点名称,如是的话就保存要删除节点的下标放在数组里。然后循环删除,但发现。。当我删除第一个后,所有节点下标数量都发生改变。。
就不能再按照之前纪录的节点 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号