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"
相关问答:
我现在做接口导出,.NET平台,开发语言C#,想导出XML的文本格式。
想得到 <?xml version="1.0" encoding="GBK"?>
的编码格式!怎么设置?谢谢!急!
顶
只要保存为xml格式, ......
我们C#做一个窗体 往数据库里插入数据
SqlConnection cn = new SqlConnection("Data Source=20090713-1752\\SQLEXPRESS;Initial Catalog=goods;Integrated Security=True");
......
我有一个XML.想取
<Portfolio _Name="XXXX" _Id="AUD" >
中的属性_Id的值.但是用下面的语句好象不行.
XmlNode CId = xdoc_Msg.SelectSingleNode("/Portfolio");
&n ......
我写了一个C#应用程序,需要向PHP页面提交一段加密的数据。C#用的DES加密算法。算法如下:C# code:
public class Crypt
{
/// <summary>
/// 创建Key
/// </su ......
内容如题。。在C#里改如何写呢?
本来思路是先比对节点名称,如是的话就保存要删除节点的下标放在数组里。然后循环删除,但发现。。当我删除第一个后,所有节点下标数量都发生改变。。
就不能再按照之前纪录的节点 ......