zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    图片懒加载技术
    验证码处理
    基于requests模块的cookie,session和线程池爬取
    最快理解
    Golang
    Django REST framework
    Django REST framework
    Django
    Django
    搭建邮件服务器 Postfix + Dovecot (CentOS)
  • 原文地址:https://www.cnblogs.com/lixyvip/p/1266512.html
Copyright © 2011-2022 走看看