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);

        }
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;
        }
    }

请你思考一下,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

        }

是不是有点像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);

        }

这时,两个输出的值才会是一样的,都为 lixy .

另外,还可以用out 和 ref来对普通参数进行改变外面的值,同样不用获取方法的返回值,关于out 和 ref参数的使用,网上很多资料;同时,对于实体类,它还可以序列化、反序列化,关于这方面的介绍,网上也有很多资料,大家可以去网上搜一下。

------------------------------------

每天在这个网站看5分钟,你就能了解整个世界 http://www.alisoosoo.cn/

原文地址:https://www.cnblogs.com/lixyvip/p/1266512.html