相信现在开发一个数据库的系统,大家都会把表里面的字段写到一个实体类里面去吧,可能有些初学者不太明白为什么要这样。这样做的好处是很多的,比如方便传值、方便代码维护(增加字段时)、方便序列化和反序列化等...

 

先说下实体传值和普通传值的根本区别,看一段代码:

 

 

        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参数的使用,网上很多资料;同时,对于实体类,它还可以序列化、反序列化,关于这方面的介绍,网上也有很多资料,大家可以去网上搜一下。

 

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