前言
拖拖拉拉,机房合作的代码编写阶段总算是完成了,因为机房合作是用C#语言编写的,而不是我们熟悉的vb.net编写,所以从中就遇到很多困难,整个代码的编写过程中,我们上网查了很多资料,我觉得应该把这些小知识点,顺便和vb.net版 的机房拿出来比较,就当时在比较中学习,颗粒归仓。
一、引用
vb.net的引用和C#里的引用有相同也有不同,VB.net直接在解决方案资源管理器引用就可以了。可是C#里不仅要在解决方案资源管理器里添加引用,还要在代码里添加引用
<span style="font-size:18px;color:#333333;">using System.Windows.Forms; using System.Net; using BLL; using Facade; using Entity;</span>
二、实例化
在我们的机房收费系统中,每一个模块都用到实例化,实例化B层的某个类, 实例化某个实体等等,刚开始敲代码的时候还真的不清楚再C#中不知道怎么实例化。
VB.net里我们是这样实例化的
<span style="font-size:18px;color:#333333;"><span style="white-space:pre"> </span>Dim card As New Model.RechargeEntity Dim cardBLL As New BLL.RechargeBLL Dim dt As New DataTable</span>
而C#里是这样的
<span style="font-size:18px;color:#333333;"> <span style="white-space:pre"> </span>cardBLL cb = new cardBLL(); CardEntity cardEntity = new CardEntity(); List<CardEntity> rs; BasicBLL bb = new BasicBLL(); BasicDataEntity bde = new BasicDataEntity(); List<BasicDataEntity> basicdataEntity;</span>
所以,很不一样吧,所以觉得困难时很正常的。
三、方法的编写
VB里方法的编写是这样的
<span style="font-size:18px;color:#333333;">Public Function selectdata(data As BasicEntity) As DataTable Implements IbasicData.selectdata </span>
<span style="font-size:18px;color:#333333;"> End Function</span>C#里是这样的
<span style="font-size:18px;color:#333333;"> public List<BasicDataEntity> SelectBasicData(BasicDataEntity data) { return MyList; }</span>
VB.net里是public function+方法名(参数)as +方法类型,结尾里要有End Function,其中代码的编写后面不用加分好。而C#里public +方法类型+方法名(参数),后面要有大括号,大括号里一定要有返回,中间的代码编写必需要有分号。
if语句里也有不一样,VB.net里是if+表达式+then+end if。
If dt.Rows.Count = 0 Then MsgBox("卡号未上机") Exit Sub End If
而C#里是if( 表达式)后面是大括号{}就完事了,比Vb.net简洁。
if (rs.Count < 1) { MessageBox.Show("卡号不存在,请重新输入卡号!"); return; }
注意到了吗?退出程序他们也是不一样的,vb.net里是Exit sub,而C#里的是直接return。
三、问题集锦
1、数据类型转换
1)string类型转换成decimal类型
ce.RegisterMoney=decimal .Parse ( txtRegisterMoney.Text.Trim());
2)string类型转换成整数型
txtIncome.Text = Convert.ToInt32(txtTemporary.Text)
2、获取本机时间
txtLoginDate.Text = DateTime.Now.ToString("yyyy-MM-dd"); txtLoginTime.Text = DateTime.Now.ToString("HH:mm:ss");
we.Computer = Environment.MachineName;也可以这样
onoffEntity.ComputerName = Dns.GetHostName().Trim();
4、获取DateTimePicker里的日期
StartDate = dtpStart.Value.ToString("yyyy-MM-dd");
5、比较两个日期的大小
因为在比较两个日期的时候,只是简单的比较这两个日期的value值,但是即使是相同的两个日期也说是起始日期大于截止日期,原因是这个控件value值具体到了小时分钟,所以就出现这个问题。只能把判断语句这样写了。
if (Convert.ToDateTime(StartDate) < Convert.ToDateTime(EndDate) || Convert.ToDateTime(StartDate) == Convert.ToDateTime(EndDate)) { }
6、获取泛型或DataTable的值。
在vb.net里我们的代码是这样编写的
txtLoginTime.Text = dt.Rows(0).Item(3)//DataTable的某行某列的值
txtStudentNo.Text = lce(0).StudentNo//获取泛型的某个值
在C#里是这样的
txtStudentNo.Text = lce[0].StudentNo;
Ice是实例化的泛型,注意到这两个括号不一样了吗?
7、listBox的运用
充值和退卡这两个地方,我们用到了listBox这个控件,在VB版的机房收费系统里,我们用上了换行符,写了一串字符,很麻烦。但是在C#里就是这样的简单几句代码就能搞定,不用到担心排版的问题。
lbCancel.Items.Add("退卡卡号:" + cce.CardNo); lbCancel.Items.Add("应退款金额:" + cce.CancelMoney+"元"); lbCancel.Items.Add("退卡日期:" + cce.CancelDate); lbCancel.Items.Add("退卡时间:" + cce.CancelTime); lbCancel .Items .Add("办理退卡老师:" + cce.UserId); MessageBox.Show("退卡成功!");
工厂层的编写一开始是照着vb.net版的工厂层改的,但是运行起来有些错误,后面思思改好了(觉得思思真的很厉害)
VB.net 的代码是这样的
Public Function CreateIUser() As IDAL.Iuser Return CType(Assembly.Load("JifangDAL").CreateInstance("Jifang.DAL" & "." & "UserDAL"),IDAL.Iuser) End Function
而C#里是这样的
/// <summary> /// 基础数据表抽象工厂类 /// </summary> public IBasicData CreateIBasicData() { IBasicData iquery; iquery = (IBasicData)(Assembly.Load("DAL").CreateInstance("DAL.BasicDataDAL")); return iquery; }
总结
机房合作虽然经历很常一段时间,曾经抱怨自己为什么不用vB.net来敲,非要用C#来敲。但是现在看来,当初的选择也没有什么错。整个机房合作敲下来,代码的亲和力增加了不少,现在看代码也不担心看不懂这些问题,也增加了不少自信心。