前言
拖拖拉拉,机房合作的代码编写阶段总算是完成了,因为机房合作是用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>
C#里是这样的
- <span style="font-size:18px;color:#333333;"> End Function</span>
- <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#来敲。但是现在看来,当初的选择也没有什么错。整个机房合作敲下来,代码的亲和力增加了不少,现在看代码也不担心看不懂这些问题,也增加了不少自信心。