求解!关于VB.net中的函数与方法的区别和共同点

超级格古达 2015-01-13 03:37:21

我是从09年开始学习编程的,跟很多人一样我学完了没有用上,玩了3年 直到如今 我终于又重回电脑前 开始写代码
可是…… 我这地区属于三线甚至更低的层次,学的java跟c# 完全没有用上 还要开始学习VB.net
突然看见一个
ExcuteME()
没有类名, 没有对象 就孤零零的自己在那 初开始我以为是方法呢, 但是……
我突然发现我完全理解不了 这是个啥东西 ,平时也喜欢来这里学习一下下 ,顺手发个帖子
求各路大神多多帮助
...全文
297 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
异常异长 2015-01-16
  • 打赏
  • 举报
回复
实际应用中都一样的 这种东西 其实 没必要那么纠结
超级格古达 2015-01-16
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
[quote=引用 8 楼 a993155435 的回复:] 之前的代码为什么 Repin.Getdata(Rtid)之后这个对象Repin就能得到值 而我为什么就必须Repin=Repin.Getdata(Rtid)才行
调用一个对象的Getdata方法,这个方法就能通过 Me 参数来访问对象自身,就可以读写对象的数据。 小同学,你还没有会到 vb.net 的 “Me” 的概念哦!凡是面向对象的编程语言,都有这个基本特质。[/quote] 是C#中的 this吗?是的话我就明白了
  • 打赏
  • 举报
回复
一般来说,给方法取名 Getdata,我们就认为是函数、要返回数据对象,而取名为 Setdata 我们就认为是要通过参数设置什么属性值。所以这里的取名可能是有问题的。这个方法(原来的方法)取名为 Getxxxx 或者 Setxxxx 都不合适,应该使用例如 Refresh 等等名字。
  • 打赏
  • 举报
回复
引用 8 楼 a993155435 的回复:
之前的代码为什么 Repin.Getdata(Rtid)之后这个对象Repin就能得到值 而我为什么就必须Repin=Repin.Getdata(Rtid)才行
调用一个对象的Getdata方法,这个方法就能通过 Me 参数来访问对象自身,就可以读写对象的数据。 小同学,你还没有会到 vb.net 的 “Me” 的概念哦!凡是面向对象的编程语言,都有这个基本特质。
超级格古达 2015-01-16
  • 打赏
  • 举报
回复
不好意思啊 好几天没上线 其实当时我问这个问题的原因是因为我boss给我一个项目的代码 有个地方我没看明白 比如说 Dim Repin As New Repin 定义了一个 Repin对象 这个对象的有很多字段用来装水晶报表要显示的数据 Repin.Getdata(Rtid) 根据主键查询的一个方法 PrintData.Add(Repin) 将这个对象放到一个PrintData中 PrintData是一个ArrayList TyBaobiao.SetDataSource(PrintData) 将水晶报表的源对象绑定 CrystalReportViewer1.ReportSource = TyBaobiao 将报表对象绑定到控件上 TyBaobiao.PrintOptions.ApplyPageMargins(margins) ' 应用页边距。 CrystalReportViewer1.Show() 报表控件显示内容 Me.Cursor = Cursors.Default 鼠标样式设置 其中 Repin.Getdata(Rtid) 我不是很明白 因为这个getdata是一个Sub其中的内容是这样的 Public Sub Getdata(ByVal tid As Integer) Dim ds As New DataSet() Dim sqlstr, WJyxm As String Dim i, ia As Integer Dim Zczstr, Jywhdg, Jywh, JywhdgY, JywhdgJ As String Dim m, n As Byte Dim Dgpja(5) As String Dim dat As Date Dim Zdpja(3) As String Dim a, b As Integer Dim wzp0 As String Dim BNTZ As Integer Dim CHECK_TIMESZ As Integer Dim YNdp As String Dim WVID, WTIDCJ As String Dim bgqy As String Dim XtsjFg As String = 0 Dim XtsjV As String = 0 WTID = tid WVID = 0 cleared() Zxbz = Zxbzv '报表第一部分 基本信息 sqlstr = "select data_check.VID,data_check.REPORT_NO,data_check.FINISH_DATE,data_check.TID," & _ "Vehicle.LICENSE_NO,Vehicle.LICENSE_TYPE,Vehicle.CHASSIS_NO,Vehicle.DRV_TYPE,Vehicle.LAMP,Vehicle.REGDATE," & _ "data_check.CHECK_TYPE,Vehicle.OWNER_NAME,Vehicle.VEH_CLASS,Vehicle.ENGINE_NO,Vehicle.YJTZ," & _ "Vehicle.OUTDATE,data_check.DLY,data_check.PILOT,Vehicle.ODO_READING,Vehicle.XYXS,Vehicle.FUEL, " & _ "Vehicle.BRAND_MODEL, Vehicle.BDY_COLOR," & _ "DATA_CHECK.CONCLUSION,DATA_CHECK.IF_PASSED,DATA_CHECK.CHECK_TIMES,DATA_CHECK.LINE_NUM,DATA_CHECK.ADVICEITEM,DATA_CHECK.folks, DATA_CHECK.IF_ROADCHECK,DATA_CHECK.ADVICECOUNT,Vehicle.FUE_DP,DATA_CHECK.Sfflg,DATA_CHECK.DL_DATE " & _ "from data_check,Vehicle " & _ "where data_check.TID=" & "'" & tid & "'and data_check.VID=Vehicle.VID" ds = WSQL.GetDataFromDB(sqlstr) If ds.Tables(0).Rows.Count > 0 Then WVID = ds.Tables(0).Rows(0)("VID").ToString Sfflg = ds.Tables(0).Rows(0)("Sfflg").ToString BDY_COLOR = ds.Tables(0).Rows(0)("BDY_COLOR").ToString REPORT_NO = ds.Tables(0).Rows(0)("REPORT_NO").ToString 'dat = ds.Tables(0).Rows(0)("FINISH_DATE") ' CHECK_DATE = dat.ToString("yyyy-MM-dd ") '检验日期 CHECK_DATE = ds.Tables(0).Rows(0)("FINISH_DATE") DY_DATE = ds.Tables(0).Rows(0)("DL_DATE") bgqy = ds.Tables(0).Rows(0)("ADVICEITEM").ToString Try CHECK_TIMESZ = CInt(CHECK_TIMES) Catch ex As Exception CHECK_TIMESZ = 1 End Try sqlstr = "select SYS_DriveType.PAK_POS,SYS_DriveType.Axle_num from DATA_INDEX,Vehicle,SYS_DriveType where DATA_INDEX.ID=" & "'" & tid & "' AND DATA_INDEX.VID=Vehicle.VID and Vehicle.DRV_TYPE= SYS_DriveType.TYPE_NAME order by DATA_INDEX.ID asc" ds = WSQL.GetDataFromDB(sqlstr) If ds.Tables(0).Rows.Count > 0 Then ZCZ = "" Zczstr = ds.Tables(0).Rows(0).Item(0) m = ds.Tables(0).Rows(0).Item(1) For i = 1 To m n = CByte(Mid(Zczstr, i, 1)) If n = 1 Then ZCZ = ZCZ & i & "轴" Next End If WJyxm = Read_ITEMS_fh(tid, WSQL) CHECK_Item = WJyxm '检验项目 Jywhdg = "O" JywhdgY = "O" JywhdgJ = "O" '---------------------------------------------------------------------------------------- '报表第三部分 '报表第四部分 '报表第五部分 …… End Sub 上面的代码就是原来的内容 因为我要改的内容变了 查询的表不一样了 所以我改成了下面的样子 Public Function Getdata(ByVal tid As Integer) As Repin1 '这里得到的是水晶报表要显示的数据 Dim repin As New Repin1 '初始化一个类然后返回该对象 Dim xuhao As Integer Dim strsql As String xuhao = tid strsql = "select 车牌号码,号牌种类,车辆类型,车主单位,底盘号码,检验员,测试开始时间,测试结束时间,实际长,实际宽,实际高,实际重量,测量长,测量宽,测量高,测量重量,长百分比,宽百分比,高百分比,重量百分比,货箱长度,货箱宽度,货箱栏板高度,流水号,发动机号码,厂牌型号,是否测量货箱,轴数,轴距数,轴距1 from csjg where 序号= " & xuhao Dim ccccc As New ClassSQL Dim qq As DataSet qq = ccccc.GetDataFromDB(strsql) repin.axleCount = qq.Tables(0).Rows(0)("轴数").ToString() 'MsgBox(repin.axleCount) 'MsgBox(qq.Tables(0).Rows(0)("轴数").ToString()) repin.axleRange = qq.Tables(0).Rows(0)("轴距数").ToString() ' repin.axleRangeFour = qq.Tables(0).Rows(0)("轴距4").ToString() repin.axleRangeOne = qq.Tables(0).Rows(0)("轴距1").ToString() ' repin.axleRangeThree = qq.Tables(0).Rows(0)("轴距3").ToString() ' repin.axleRangeTwo = qq.Tables(0).Rows(0)("轴距2").ToString() repin.boxHeight = qq.Tables(0).Rows(0)("货箱栏板高度").ToString() repin.boxLong = qq.Tables(0).Rows(0)("货箱长度").ToString() repin.boxWidth = qq.Tables(0).Rows(0)("货箱宽度").ToString() repin.carClass = qq.Tables(0).Rows(0)("车辆类型").ToString() repin.carHeight = qq.Tables(0).Rows(0)("实际高").ToString() ' repin.carID = qq.Tables(0).Rows(0)("序号").ToString() repin.carLong = qq.Tables(0).Rows(0)("实际长").ToString() repin.carNum = qq.Tables(0).Rows(0)("车牌号码").ToString() repin.carOwnerOffice = qq.Tables(0).Rows(0)("车主单位").ToString() repin.carWidth = qq.Tables(0).Rows(0)("实际宽").ToString() repin.chassicNumber = qq.Tables(0).Rows(0)("底盘号码").ToString() repin.checkHumen = qq.Tables(0).Rows(0)("检验员").ToString() repin.endTime = qq.Tables(0).Rows(0)("测试结束时间").ToString() repin.meaSureHeight = qq.Tables(0).Rows(0)("测量高").ToString() repin.meaSureLong = qq.Tables(0).Rows(0)("测量长").ToString() repin.meaSureWidth = qq.Tables(0).Rows(0)("测量宽").ToString() repin.widthPrecent = qq.Tables(0).Rows(0)("宽百分比").ToString() repin.heightPrecent = qq.Tables(0).Rows(0)("高百分比").ToString() repin.longPrecent = qq.Tables(0).Rows(0)("长百分比").ToString() If (Math.Abs(Convert.ToDouble(repin.heightPrecent)) > 1) Then repin.yesnoheight = "不合格" Else repin.yesnoheight = "合格" End If If (Math.Abs(Convert.ToDouble(repin.longPrecent)) > 1) Then repin.yesnolong = "不合格" Else repin.yesnolong = "合格" End If If (Math.Abs(Convert.ToDouble(repin.widthPrecent)) > 1) Then repin.yesnowidth = "不合格" Else repin.yesnolong = "合格" End If 'MsgBox(repin.heightPrecent) 'MsgBox(Convert.ToDouble(repin.heightPrecent)) 'MsgBox(Math.Abs(Convert.ToDouble(repin.heightPrecent))) 'MsgBox(Math.Abs(Convert.ToDouble(repin.longPrecent))) 'MsgBox(Math.Abs(Convert.ToDouble(repin.widthPrecent))) repin.widthPrecent = qq.Tables(0).Rows(0)("宽百分比").ToString() & "%" repin.heightPrecent = qq.Tables(0).Rows(0)("高百分比").ToString() & "%" repin.longPrecent = qq.Tables(0).Rows(0)("长百分比").ToString() & "%" Return repin End Function 本来我也是用的sub 但是突然发现没有返回值的话 我无法得到数据 所以我把外面的改了 Repin = Repin.Getdata(Rtid) 这跟原来的代码不一样 我想问一下 之前的代码为什么 Repin.Getdata(Rtid)之后这个对象Repin就能得到值 而我为什么就必须Repin=Repin.Getdata(Rtid)才行
shuangyuego 2015-01-15
  • 打赏
  • 举报
回复
我也正在学,看到这种不知道怎么回事的可以右键,转到定义处看看,是自己定义的还是什么
ajaxfeifei 2015-01-15
  • 打赏
  • 举报
回复
函数和方法其实没区别只是名字不一样而已,有区别的是这个方法是静态方法还是类方法,类方法需要实例化类,静态方法直接调用即可。
gba8jing 2015-01-15
  • 打赏
  • 举报
回复
通俗的说应该是 调用一个方法或函数吧。 Private Sub ExcuteME() ...... ..... End Sub ExcuteME()
  • 打赏
  • 举报
回复
ExcuteME() 就是 Call ExcuteME() 可以不写前边的 Call 的。
fyming 2015-01-13
  • 打赏
  • 举报
回复
VB6中尽量用函数,VB.NET中不知道哪个更好
於黾 2015-01-13
  • 打赏
  • 举报
回复
函数和方法其实是一个玩意,至少在VC,VB里没有什么区别 在其他语言里可能会明确区分 大体来说就是有返回值的就叫函数,没有返回值的就叫方法

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧