您的位置:首页 > 编程语言 > C#

c#对象赋值,返回,和参数传递注意事项

2012-11-17 19:58 591 查看
c#对象赋值,返回,和参数传递都是引用方式进行的,用惯c++的就要注意这个特征

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private Hashtable mMyTable = new Hashtable();

private int mMyInt = 0;
public Form1()
{
InitializeComponent();
}

private Fool GetFool(string strName)
{
return (Fool)mMyTable[strName];
}

private int GetInt()
{
return mMyInt;
}

private void button1_Click(object sender, EventArgs e)
{
Fool myfool = new Fool();
myfool.mName = "First";
myfool.mValue = 100;
mMyTable.Add("first", myfool);

//c#对象值传递都是默认传递引用
Fool fool = (Fool)mMyTable["first"];
fool.mValue = 200;//会影响hashtable里面的值
MessageBox.Show(((Fool)mMyTable["first"]).mValue.ToString());

fool.mValue = 300;//会影响hashtable里面的值
MessageBox.Show(GetFool("first").mValue.ToString());

//哪怕你预先new一个对象也好
Fool fool1 = new Fool();
fool1 = GetFool("first");
fool1.mValue = 400;//会影响hashtable里面的值
MessageBox.Show(GetFool("first").mValue.ToString());

//这回才是真正的传递内存拷贝,需要实现 ICloneable 接口中的 object Clone()
Fool fool2 = (Fool)GetFool("first").Clone();
fool2.mValue = 500;//不会影响hashtable里面的值
MessageBox.Show(GetFool("first").mValue.ToString());

//注意基本数据类型还是默认传值
int intval = GetInt();
intval++;
MessageBox.Show(GetInt().ToString());

}
}
}


class Fool : ICloneable
{
public string mName = "";
public int mValue = 0;

public object Clone()
{
return this.MemberwiseClone();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐