• 关于引用类型ref的运用


    一直没有弄明白ref的用法,今天用了一下msdn,发现竟然是如此的简单,用的时间要注意

    若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。

    一句话把我的迷津全部点开了
    例子:
     class RefExample
        {
            static void Method(ref int i)
            {
                // Rest the mouse pointer over i to verify that it is an int.
                // The following statement would cause a compiler error if i
                // were boxed as an object.
                i = i + 44;
            }
    
            static void Main()
            {
                int val = 1;
                Method(ref val);//这个val和上面的val是同一个
                Console.WriteLine(val);
    
                // Output: 45
            }
        }
    
    


    在一个方法的参数定义为ref类型,在调用方法里显示的使用ref关键字。

    在三层架构里面,验证数据是否完整,也会用到ref关键字。

    一般会在BLL层里面验证,

    如下面的代码:
      #region 检查数据完整性
            /// <summary>
            /// 检查数据完整性
            /// </summary>
            /// <param name="mdlObj"></param>
            /// <param name="strMsg"></param>
            /// <returns></returns>
            protected bool ChkIntegrity(MDL.News_Type mdlObj, ref string strMsg)// 方法里面用关键字ref声明
            {
                if (mdlObj.NewsType_Name == "")
                {
                    strMsg = "分类名称不能为空!";
                    return false;
                }
                if (mdlObj.NewsType_ID > 0)      // 当编辑修改的情况下
                {
                    DataTable dt = GetAllChildren(mdlObj.NewsType_LangVer, mdlObj.NewsType_ID.ToString());
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        int intNewsType_ID = Convert.ToInt32(dt.Rows[i]["NewsType_ID"]);
                        if (mdlObj.NewsType_ParID == intNewsType_ID)
                        {
                            strMsg = "父节点和子节点死循环!";
                            return false;
                        }
                    }
                }
                return true;
            }
            #endregion

    同样在BLL的属于方法

    在ui层运用的时间要声明ref

    代码如下:

            string strMsg = "";
            string strNews_ID = "";
            int intFlag = bllMst.Add(mdlObj, ref strNews_ID, ref strMsg);//如果不够完整,在此strMsg已经发生改变,下面就可以调用的到。。。。
            if (intFlag > 0)
            {
                string strGoUrl = "NewsImg.aspx?Lang=" + strLangVer + "&News_ID=" + strNews_ID;
                Response.Redirect(strGoUrl);
            }
            else
            {
                MessageBox.Show(this, strMsg);
            }




     

  • 相关阅读:
    如何在DBGrid中能支持多项记录的选择
    How to create a OnCellDblClick for Delphi's TDBGrid
    如何在DBGrid里实现Shift+“选择行”区间多选的功能!
    DBGrid中Shift多选
    代码校验工具 SublimeLinter 的安装与使用
    jquery压缩图片插件
    React 入门最好的实例-TodoList
    前端切图
    提升前端效率的方式
    单页面应用的痛点
  • 原文地址:https://www.cnblogs.com/lzhp/p/2680771.html
Copyright © 2020-2023  润新知