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/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值