VB.NET学习体会
注:本文写于2018年01月28日,首先发表于CSDN博客“aopstudio的博客”上
下学期要学习VB.NET程序设计课程,这几天在家开始自习。在自习的过程中发现VB.NET和Java以及C语言有很大的不同,在这里总结一下到目前为止的成果。以后还会逐渐更新。
首先最大的不过也是最不重要的一个不同点就是VB每条语句不需要用分号结尾。一开始写程序的时候习惯性地就会在语句末尾加上一个分号;,结果就报错了。但习惯了以后就好,而且如果加了分号是不可能编译通过的,俗话说得好:能在编译时找到的问题都不是问题,所以称它为最不重要的。
C和Java都用大括号{}来表示语句块。但VB不是,它使用的是End。就说main函数吧。
C语言这样写:
int main(void)
{
//函数体
}
Java这样:
public static void main(String[] args){
//函数体
}
而VB这样写:
Sub Main()
'函数体
End Sub
粗略地分来,函数(或者叫方法)可以分为两大类,一种是有返回值的,一个是没有返回值的。Java和C语言的处理方法类似,都采用void表示无返回值。但VB就不同了,根据我目前的了解,它采用Sub和Function这两个关键词分别代表无返回值和有返回值。而且返回的方法除了使用return外,还可以把要返回的值赋给函数名。例:
Function Plus(a As Integer)
Plus = a + 1
End Function
上面这个函数就返回了参数加1之后的值。
提到函数,相信有人就会想到形参和实参的问题,也就是传值调用和引用调用的问题。在C语言中这是个需要用到指针解决的问题;Java则作了区分:基本数据类型是传值调用,对象引用类型是传引用。VB则用关键字来解决这个问题:ByVal代表传值调用,ByRef代表引用调用。例:
主函数都相同:
Sub Main()
Dim a As Integer = 1
Console.WriteLine(a)
Console.WriteLine(Plus(a))
Console.WriteLine(a)
End Sub
Plus函数如下:
(1)
'引用调用版本
Function Plus(ByRef a as Integer)
Plus=a+1
End Function
它的输出是:
1
2
2
(2)
'传值调用版本
Function Plus(ByVal a as Integer)
Plus=a+1
End Function
它的输出是:
1
2
1
ByVal和ByRef是可以省略不写的。在VB6以及之前的版本中,默认采用的是ByRef方式,在之后的版本中采用的是ByVal的方式。
接下来要说的是VB的数组。和C语言以及Java语言不同,它是用圆括号而不是方括号定义的,而且元素数量也不同,会比Java多一个。*Talk is cheap, show me the code. *接下来就给出一个例子。
Dim a(10) As Integer
这句代码就定义了一个含有11个元素(a(0)到a(10))的整型数组。同时也发现,VB会对数组是否越界进行检查,但不会在编译时提示,而是在运行时控制台中给出提示。我们接着上面的代码继续往下写
a(11) = 1
Console.WriteLine(a(11))
产生的结果如下
再来说说VB的循环以及和循环相关的一些内容。首先说说for循环吧。使用for循环打印出1到9,Java这样写:
for(int i=0;i<10;i++){
System.out.println(i);
}
VB这样写:
Dim i as Integer
For i=0 To 9
Console.WriteLine(i)
Next
看到i++我就要提一句,VB里面是没有++这个运算符的,但是有+=。要进行加一的操作的话,除了最麻烦的a=a+1,只能a+=1。
我看到有的教程里面Next后面会加一个i,有些又不加,就上网搜索了一下到底是怎么回事。最后得出的结论是加和不加没有区别,加上i是为了兼容过去BASIC的语法。
还有一个有关的内容是VB的等于运算。VB不用==来表示相等比较,而是使用=来表示,同时=也有赋值的含义。那就有问题了,该怎么区分到底是赋值还是相等。网上给出的答案是进行条件判断的时候比如if,for,while的时候就代表等于,其他时候就是赋值。但是我个人认为这并没有从根本上解决问题。试想一下这种情况,Java语言可以做到这样的功能:
int a;
Scanner sc=new Scanner(System.in);
while((a=sc.nextInt())>0) {
System.out.println(a);
}
sc.close();
在while循环中进行一个判断,如果a>0,则输出a;a<0,则跳出循环。但是VB呢,我试了一下这样写:
Dim i As Integer
While ((i = Console.ReadLine()) > 0)
Console.WriteLine(i)
End While
打开隐式转换的警告后,下面会给出这样的提示:
可以看出来,VB仍然将那个赋值式子当作布尔表达式来处理,也就是说=还是等于的意思。我不知道是VB里面不能把一整个表达式和一个值来比较的缘故还是看到for就把=当作等于,反正这个=就不是赋值的意思。
VB.NET学习体会的更多相关文章
- TagHelper的一些个人学习体会(发现了微软官方文档的一个错误)
最近一直在学习.net core 上周六开始学习Taghelper的自定义,准备周日写个博客和大家分享一下学习体会,无奈周日去考科四了,回来之后就感冒了,现在还没好.可是我发现了微软官方文档的一个错误 ...
- C Primer Plus 学习体会
本月刚刚开始学习<C primer plus>,之前课上草草学过一遍,讲到指针就结束了.现在重新开始看感觉难度不大只是刚开始接触有些语言细节比较琐碎.学习这一周的体会如下: 诸多前辈推荐的 ...
- VB 语言学习笔记.
暂时用到,学习学习. 变量声明 Dim 变量名 as 数据类型类型 Set 实例 = new 类名 自定义数据类型 Type 数据类型标识符 域名 As 数据类型; 域名 As 数据类型; 域名 As ...
- .net学习体会
莫名其妙学了IT,在课堂上学了C,C++,自学了C#,也做了一些网站项目,学习过程,写了厚厚的几本笔记本,却没写博文的习惯,前几天,有同学问学习.net的建议.其实我懂的也不多,也给了一些个人见解,主 ...
- (转).net开发者对android第二周的学习体会
这一周相对没有春节时这么闲了,白天也比较多的工作要做,每天晚上又要被我三岁的女儿折腾到十点, 实在没有多少时间学习.在前一周的基础上,这周我试着自己练习写了一个个人管理的android的程序,主要实现 ...
- (转).net开发者对android开发一周的学习体会
春节期间,相对比较闲,上班时也没什么事情做.利用这一周的时间,简单的学习了一下移动方面的开发.主要是针对android,其实我对IOS更感兴趣 (因为我用iphone),苦于暂时没有苹果电脑,只能把它 ...
- OO学习体会与阶段总结(多线程程序)
前言 在最近一个月的面向对象编程学习中,我们进入了编写多线程程序的阶段.线程的创建.调度和信息传递,共享对象的处理,线程安全类的编写,各种有关于线程的操作在一定程度上增加了近三次作业的复杂度与难度,带 ...
- OO学习体会与阶段总结(设计与实现)
前言 在最近的一个月的课程中,笔者对于规格化编程进行了深入的学习.运用面向对象抽象思想对编写的程序进行过程抽象.异常处理.数据抽象.类的层次规格与迭代等等规格设计,使得程序结构化程度提高,具有更好 ...
- PIE 插件式开发小笔记__PIESDK学习体会
基于PIE.NET-SDK插件式二次开发文档笔记: PIE 插件式开发配置文件: 它里面一行如下: 理解上一行'Item'关系-> library:为插件类名(程序集名称+后缀 ...
随机推荐
- Gym - 101670E Forest Picture (CTU Open Contest 2017 模拟)
题目: https://cn.vjudge.net/problem/1451310/origin 题意&思路: 纯粹模拟. 大体题意是这样的: 1.有人要在一个10-9<=x<=1 ...
- 每日命令:(5)rm
昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...
- 爬虫之BeautifulSoup库
文档:https://beautifulsoup.readthedocs.io/zh_CN/latest/ 一.开始 解析库 # 安装解析库 pip3 install lxml pip3 instal ...
- [bzoj2461][BeiJing2011][符环] (括号配对+记忆化搜索+高维dp)
Description 在可以炼制魔力强大的法杖的同时,Magic Land 上的人们渐渐意识到,魔力强大并不一定能给人们带来好处——反而,由此产生的破坏性的高魔力释放,给整个大陆蒙上了恐怖的阴影. ...
- type="timestamp"与type="date"区别
type="timestamp"-----数据库中保存的时间为年月日时分秒 与type="date"---------数据库中保存的时间为年月日
- Leetcode 90.子集
子集 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], ...
- 九度oj 题目1050:完数
题目1050:完数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8778 解决:3612 题目描述: 求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子 ...
- 最小生成树+BFS J - Borg Maze
The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. ...
- Mysql修改自增主键的起始值及查询自增主键的下一个值
MySQL [xxx_mall]> alter table shop_base_info AUTO_INCREMENT=11000;Query OK, 0 rows affected (0.0 ...
- Hadoop2.0安装之非HA版
主要步骤跟Hadoop1.0(1.0安装地址)一致,主要在配置这块有更改 安装 下载地址:http://archive.apache.org/dist/hadoop/core/hadoop-2.6.5 ...