匈牙利命名法

匈牙利命名法是一名匈牙利程序员发明的,而且他在微软工作了多年。此命名法就是通过微软的各种产品和文档传出来的。多数有经验的程序员,不管他们用的是哪门儿语言,都或多或少在使用它。

这种命名法的基本原则是:

变量名属性类型对象描述

即一个变量名是由三部分信息组成,这样,程序员很容易理解变量的类型、用途,而且便于记忆。

下边是一些推荐使用的规则例子,你可以挑选使用,也可以根据个人喜好作些修改再用之。

(1) 属性部分:

全局变量: g_

常量 : c_

类成员变量: m_

(2) 类型部分:

指针: p

句柄: h

布尔型: b

浮点型: f

无符号: u

(3) 描述部分:

初始化: Init

临时变量: Tmp

目的对象: Dst

源对象: Src

窗口: Wnd

下边举例说明:

hwnd: h表示句柄,wnd表示窗口,合起来为“窗口句柄”。

m_bFlag: m表示成员变量,b表示布尔,合起来为:“某个类的成员变量,布尔型,是一个状态标志”。

写一个很水的c#项目,主要看结构

项目结构是这样的

2018-07-05_175555.png

一个winform项目,一个类库项目。

类库里有两个类,class1(创建类库项目时自建的),class2(拖拽生成的类),这个类库是用类图 ClassLibrary1.ClassDiagram1.cd 文件创建的(拖拖拽拽生成一个类,特别爽)。

2018-07-05_180054.png

下面的winform项目中的类class1,接口IClass 也是这种方法创建的。

之后是在这个项目中引用类库 ClassLibrary1中的类:

首先,右击生成这个类库项目,然后在调试目录得到对应的.dll文件。之后右击引用将该 dll 文件添加到winform项目中。完了之后就可以在winform项目中要用到ClassLibrary1内数据的位置这样调用

ClassLibrary1.Class2 cls = new ClassLibrary1.Class2();

cls.Method();

这就是类库的意义,用法和类图设计工具的便利。

            //保存了手术统计报表信息的表
            DataTable dt = new DataTable();
            dt.Columns.Add("operation_name", Type.GetType("System.String"));
            dt.Columns.Add("daoci", Type.GetType("System.String"));
            dt.Columns.Add("deadthCount", Type.GetType("System.String"));
            dt.Columns.Add("avgDaysInHospital", Type.GetType("System.String"));
            dt.Columns.Add("avgCosts", Type.GetType("System.String"));

            //新添一行数据到数据集中
            DataRow dr0 = dt.NewRow();
            dr0["operation_name"] = textBox1.Text;//手术名称
            dr0["daoci"] = daoci;//倒次
            dr0["deadthCount"] = deadthCount;//死亡人次
            dr0["avgDaysInHospital"] = string.Format("{0:F2}", avgDaysInHospital);//平均住院天数
            dr0["avgCosts"] = string.Format("{0:F2}", avgCosts);//平均住院费用
            dt.Rows.Add(dr0);

            gvOperationSheetInfo.DataSource = dt;

完全卸载oracle11g步骤:

1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。

2、 开始->程序->Oracle - OraHome81->Oracle Installation Products-> Universal Installer,单击“卸载产品”-“全部展开”,选中除“OraDb11g_home1”外的全部目录,删除。

5、 运行regedit,选择HKEY_LOCAL_MACHINESOFTWAREORACLE,按del键删除这个入口。

6、 运行regedit,选择HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滚动这个列表,删除所有Oracle入口(以oracle或OraWeb开头的键)。

7、 运行refedit,HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplication,删除所有Oracle入口。

8、 删除HKEY_CLASSES_ROOT目录下所有以Ora、Oracle、Orcl或EnumOra为前缀的键。

9、 删除HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerMenuOrderStart MenuPrograms中所有以oracle开头的键。

10、删除HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INI中除Microsoft ODBC for Oracle注册表键以外的所有含有Oracle的键。

11、我的电脑-->属性-->高级-->环境变量,删除环境变量CLASSPATH和PATH中有关Oracle的设定。 12、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标。

13、删除所有与Oracle相关的目录(如果删不掉,重启计算机后再删就可以了)包括:  

1.C:Program fileOracle目录。   

2.ORACLE_BASE目录(oracle的安装目录)。     3.C:WINDOWSsystem32configsystemprofileOracle目录。   

4.C:UsersAdministratorOracle或C:Documents and SettingsAdministratorOracle目录。     5.C:WINDOWS下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。     6.C:WINDOWS下的WIN.INI文件中若有[ORACLE]的标记段,删除该段。

14、如有必要,删除所有Oracle相关的ODBC的DSN

15、到事件查看器中,删除Oracle相关的日志 说明: 如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了。

条件判断多少次

// 代码1
if (dgvDiagnose.SelectedRows.Count != 1)
    return;

if (!m_MRFirstPageDAL.m_dsDiagnosis.IsInitialized)
    return;

if (m_MRFirstPageDAL.m_dsDiagnosis.Tables.Count != 1)
    return;

显然代码1判断3次。三个表达式的值都为false才执行后面的代码。因此执行后面代码的概率为1/8,不执行的概率为7/8。

现在考虑这样一段代码

// 代码2
if (dgvDiagnose.SelectedRows.Count != 1 || !m_MRFirstPageDAL.m_dsDiagnosis.IsInitialized || m_MRFirstPageDAL.m_dsDiagnosis.Tables.Count != 1)
    return;

代码2的if判断中,只要3个表达式其中一个符合条件,则后面代码都不能被执行。假如后面的代码不能被执行,那么至少判断1次,至多判断3次。假如判断是从左往右进行,那么判断1次表明程序只判断了dgvDiagnose.SelectedRows.Count != 1就确定了if表达式的值,就是说这个判断的值为true。判断2次表明dgvDiagnose.SelectedRows.Count != 1false,而!m_MRFirstPageDAL.m_dsDiagnosis.IsInitializedtrue。判断3次表明dgvDiagnose.SelectedRows.Count != 1!m_MRFirstPageDAL.m_dsDiagnosis.IsInitialized都为false,而m_MRFirstPageDAL.m_dsDiagnosis.Tables.Count != 1true。判断从右向左执行也是同样的道理。总之,这种情况下,不执行后面代码的判断次数的取值范围为[1-3],不执行的概率为7/8,执行概率1/8。

// 代码3
if (dgvDiagnose.SelectedRows.Count != 1 && !m_MRFirstPageDAL.m_dsDiagnosis.IsInitialized && m_MRFirstPageDAL.m_dsDiagnosis.Tables.Count != 1)
    return;

代码3表明,只有三个表达式同时为true,后面的代码才不执行。换言之,只要其中一个不是true,后面的代码都会被执行。这种情况下,不执行后面代码的概率为1/8,执行概率7/8。

// 代码4
if (dgvDiagnose.SelectedRows.Count != 1 && !m_MRFirstPageDAL.m_dsDiagnosis.IsInitialized || m_MRFirstPageDAL.m_dsDiagnosis.Tables.Count != 1)
    return;

或

// 代码5
if (dgvDiagnose.SelectedRows.Count != 1 || !m_MRFirstPageDAL.m_dsDiagnosis.IsInitialized && m_MRFirstPageDAL.m_dsDiagnosis.Tables.Count != 1)
    return;

代码4或代码5,这种情况下,由于&&优先级大于||,若要后面的代码被执行,则if判断结果必为false。那么(a && b || c)中,c a && b 必为falsea && bfalse,表明a,b中至少一个为false,显然有三种情况。那么,不执行后面代码的概率为3/8,执行概率5/8。(a || b && c)也是同样的道理。

从以上的分析中,可以归纳出2条结论

1、代码1与代码2不等同。代码1必定判断3次,而代码2最多判断3次。也就是说,代码2的3个判断表达式发生失效的概率为2/3,代码1发生判断失效的概率为0。

2、后续代码失效的概率,代码2比代码3的高。虽然是||连接的,看起来似乎要更宽松,实际不是。