C#中实体参数传值和普通参数传值的区别
相信现在开发一个数据库的系统,大家都会把表里面的字段写到一个实体类里面去吧,可能有些初学者不太明白为什么要这样。这样做的好处是很多的,比如方便传值、方便代码维护(增加字段时)、方便序列化和反序列化等...
先说下实体传值和普通传值的根本区别,看一段代码:
protected void Page_Load(object sender, EventArgs e)
{
Info info = new Info();
info.NameStr = "grant";
string mingz = "grant";
ChangeName.ChangeNameStr(info);
ChangeName.ChangeMingz(mingz);
Response.Write(info.NameStr);
Response.Write(mingz);
}
{
Info info = new Info();
info.NameStr = "grant";
string mingz = "grant";
ChangeName.ChangeNameStr(info);
ChangeName.ChangeMingz(mingz);
Response.Write(info.NameStr);
Response.Write(mingz);
}
public class Info
{
private string _nameStr;
public string NameStr
{
set { _nameStr = value; }
get { return _nameStr; }
}
}
public sealed class ChangeName
{
public static Info ChangeNameStr(Info info)
{
info.NameStr = "lixy";
return info;
}
public string ChangeMingz(string mingz)
{
mingz = "lixy";
return mingz;
}
}
{
private string _nameStr;
public string NameStr
{
set { _nameStr = value; }
get { return _nameStr; }
}
}
public sealed class ChangeName
{
public static Info ChangeNameStr(Info info)
{
info.NameStr = "lixy";
return info;
}
public string ChangeMingz(string mingz)
{
mingz = "lixy";
return mingz;
}
}
请你思考一下,Response.Write(info.NameStr); 和 Response.Write(mingz); 输出的信息是不是一样的?
答案是:
前者输出的是:lixy 后者输出的是:grant
初学者可能还没明白我要说的,现在再分析一下代码:
protected void Page_Load(object sender, EventArgs e)
{
Info info = new Info();
//赋值操作
info.NameStr = "grant";
string mingz = "grant";
ChangeName.ChangeNameStr(info); //注意:这里虽然没有使用 info = ChangeName.ChangeNameStr(info);的方式,但是也能将实体对象的值改变
ChangeName.ChangeMingz(mingz);
Response.Write(info.NameStr); //输出:lixy 而不是 grant
Response.Write(mingz); //输出:grant
}
{
Info info = new Info();
//赋值操作
info.NameStr = "grant";
string mingz = "grant";
ChangeName.ChangeNameStr(info); //注意:这里虽然没有使用 info = ChangeName.ChangeNameStr(info);的方式,但是也能将实体对象的值改变
ChangeName.ChangeMingz(mingz);
Response.Write(info.NameStr); //输出:lixy 而不是 grant
Response.Write(mingz); //输出:grant
}
是不是有点像C里面的指针,参数传进去后,外面的值也改变了呢。实体对象传到一个方法后,在方法中的所有操作,即使不将方法的返回结果赋值给外面的对象,外面的对象也会被影响,而普通变量做为参数传值,就不能这样。
如果要将两者输出的结果都为lixy ,那么需要把代码稍微改一下:
protected void Page_Load(object sender, EventArgs e)
{
Info info = new Info();
info.NameStr = "grant";
string mingz = "grant";
ChangeName.ChangeNameStr(info);
//修改这里
string ChangeResult = ChangeName.ChangeMingz(mingz);
Response.Write(info.NameStr);
//输出普通传值结果
Response.Write(ChangeResult);
}
{
Info info = new Info();
info.NameStr = "grant";
string mingz = "grant";
ChangeName.ChangeNameStr(info);
//修改这里
string ChangeResult = ChangeName.ChangeMingz(mingz);
Response.Write(info.NameStr);
//输出普通传值结果
Response.Write(ChangeResult);
}
这时,两个输出的值才会是一样的,都为 lixy .
另外,还可以用out 和 ref来对普通参数进行改变外面的值,同样不用获取方法的返回值,关于out 和 ref参数的使用,网上很多资料;同时,对于实体类,它还可以序列化、反序列化,关于这方面的介绍,网上也有很多资料,大家可以去网上搜一下。
------------------------------------
每天在这个网站看5分钟,你就能了解整个世界 http://www.alisoosoo.cn/