VB.NET 与 C# 基础语法区别(一)

来源:互联网 发布:数据库系统概论(第5版) 编辑:程序博客网 时间:2024/05/16 23:38

2011-02-14 23:31:51|  分类: .net |  标签:c#  vb.net  区别  语法  对比  |字号 订阅

VB.NET 与 C# 基础语法区别(一)


1.C# 是对大小写敏感的,VB对大小写不敏感,如: NAME 和 name ,在C#下是两个不同的对像,而在VB中都是指向同一个对象.

VB中的变量声明

C# 中的变量声明

'使用dim声明变量,然后跟AS关键字和类型修饰
'Dim 变量名 As 类型 = 值

Dim name As String = "michelle"

//C# 里使用类型后面跟变量名进行对象声明 
//类型 name = 值;

string name = "edward";

在vb中rem 和字符'是注解的标识符
在C#里String是.Net Framework的一个类,而string是关键字,编译时string会映射到类System.String
而C#里的注解标识使用字符//标识一行注解,要注解一段内容使用 /* */ 将内容包含在内.

2.修饰符

修饰符描述

VB

C#

公共标识

Public

public

私有标识

Private

private

程序集标识

Friend

internal

保护标识

Protected

protected

部分类标识

Partial

partial

静态标识

Shared

static

密封类标识

NotInheritable

sealed

抽象类标识

MustInherit

abstract

重写标识

Overrides

override

虚函数标识

Overridable

virtual


3.条件判断语句

VB中的IF语句

C#中的if语句

    If 条件 Then 语句

    if (条件) 语句;

    If 条件 Then
        '…代码

    ElseIf 条件 Then
        '…代码

    Else
        '…代码

    End If

    if (条件){
               //代码;

    }else if (条件){
               //代码;

    }else{
              //代码;

    }


4.选择语句

VB中的选择语句

C#中的选择语句

    Select Case 对象
        Case 值1 To 值2
                   '代码

        Case 值3,值4,值5
                   '代码

        '…更多的值

        Case Else

                   '代码

    End Select
    'VB里可以使用To关键字指定范围
    '多个值以逗号分开可以写在同一分支

    switch (对象)
    {      case 值1:
               //代码

               break

            case 值2:

               //代码

               break;

             //…更多的值

            default:

               //代码

                break;

    }


5.循环语句

VB 中的While循环语句

C# 中的While循环语句

    While (条件)
        '…代码

        Continue While

        Exit While

    End While

    While(条件){
        //代码;

        continue; 

        break;

    }


VB 中的 Do 循环语句

C# 中的Do 循环语句

    Do 
        '…代码

        Continue Do

        Exit Do

    Loop [While | Until] 条件
    '方括号中可选择使用While或Until
    'While表示当表达式成立时执行循环
    'Until 表示当表达式不成立时执行循环
    'Vb中Do循环可以先判断或后判断方式执行
    '具体由判断条件放在do后还是loop后决定

    do{
        //代码;

        //与while循环的区别是do循环先执行一次

        continue;

        break

    } while (条件)
// C# 中不能像VB一像把while条件放在do后
//若要使用先判断后执行则需要使用 while循环


VB 中的 FOR 循环

C# 中的 for 循环

    For 变量 As 类型 = 起始值 To 终止值
        '…代码

        Continue For 

        Exit For

    Next For

    for (类型 变量=初始值; 结束条件 ; 递增表达式)
    {  '…代码
        continue;

        break;

    }

    For Each 变量 As 类型 In 集合对象
        'for each 循环用于遍历集合对象

        '…代码

        Continue For 

        Exit For

    Next For

    foreach (类型 变量 in 集合对象)
    {
        '…代码

        continue;

        break;

    }


6.类

VB

C#

[Public|Private|Friend] Class 类名
    '其中public修饰类为公开
    'private修饰的类表示私有
    'friend修饰的表示程序集内公开


    [Public|Private] [Shared] Sub New()
        '这是类的构造函数
        'vb使用Shared标识共享(即静态) 

    End Sub

    Protected Overrides Sub Finalize()
        '析构函数,重写基类的Finalize
        MyBase.Finalize()
    End Sub
End Class 

'下面声明模块,和C#的静态类相当
Module 模块名
    'VB的模块能在整个程序共享访问
End Module

[public|private|internal|staticclass 类名
{   //public 公开
    //private 私有
    //internal 内部
    //private不能在名称空间下修饰
    /*static修饰静态类,和vb中的模块相同,区别是受c#语法规则的约束,访问静态类成员时需要带上类名*/


    [public|private|internal|static] 类名()
    {
        //这是类的构造函数,名称必须和类名一致
        /*静态构造函数没有参数,可以和实例构造函数共存,静态构造函数不会被继承.
*/

    }

    ~类名()
    {
        //类的析构函数,使用~字符加上类名表示
        //析构函数不需要修饰符和参数,也不带返回值
        /*析构函数有且只有一个,如没有编写,编译器自动为其创建*/

    }
}

Partial Public Class 类名
    '部分类,用于外部扩充成员
End Class

partial public class 类名
{    '这里定义部分类的新成员
}

Public Class 类名
    Private Sub New()
        '只有私有构造函数,不能使用New实例化
    End Sub

End Class

public class 类名
{
    private 类名()
    {
        //私有构造函数,禁止使用new生成实例
        /*编译器会为没有构造函数的类创建一个默认的空构造函数*/

    }
}


7.结构

VB中的结构

C#中的结构

[Public|Private|Friend][Shared] Structure 结构名
    Implements 接口名

    '结构内可以实现接口
    '可以定义方法或构造函数
    '也可以定义委托,属性,事件,重写运算操作符
    '结构为值类型,其构造函数在不带参数时需要指明Shared关键字,带参数的构造函数可以不带Shared关键字
    '结构为值类型,值类型没有析构函数

    Sub New(ByVal 参数变量 AS 类型)
        '在这里执行初始化
    End Sub

    'VB的结构成员默认是公开的
    '成员不能修饰为protected

    Dim 成员 AS 类型

    Function 方法名() AS 返回类型
        '...代码
        Return 返回值
    End Function

    '结构也可以包含类,但使用时必须引用完整名称
    Class 类名
        '...代码
    End Class
End Structure

[public|private|internal] struct 结构名 接口名
{
    [public|private] 类型 成员;

    [public|static] 结构名(类型 参数变量)
    {
        //构造函数,在这里进行初始化
    }
    //当使用static时不能指定范围修饰符
    //c#的结构成员默认是私有的
    /*c#的结构和vb的一样,都可以实现接口和加入构造函数,加入方法,和定义属性和事件,嵌套多个类和结构,重写运算操作符*/

    public void 方法名()
    {
        //..代码
        return;
    }

    public class 类名
    {
        //...代码
    }
}

 

8.枚举

VB中的枚举

C#中的枚举

Enum 枚举名称 [AS 类型]
    '方括号里为可选项,默认为 Integer
    '可以接受以下类型: Integer,Long,Byte,
     SByte,Short,UInteger,ULong,UShort

    '枚举成员,若不为成员设定值,编译器默认从0开始为成员设定默认值


    '成员不能使用范围修饰符
    '也不能为每一个成员指定类型

    成员名称 = 值
End Enum

enum 枚举名称
{
    //枚举成员,使用逗号分隔每一个成员
    成员1=值1,成员2=值2,
    成员3=值3
}


9.方法的参数传递

  • 值类型传递 
    值类型传递是指:传递的是值类型对象时,将对象的值进行复制,原对象的值不受影响.

    在 VB.NET 中默认的传值方式是 ByVal ,所以在 VB.NET 中省去 ByVal 的关键字表示的是使用ByVal的方式

    在 C# 中同样也是默认值传递方式,所以在 C# 中不带关键字则表示值传递方式

  • 引用类型传递
    引用类型传递:即内存地址传递,直接把引用类型的内存首地址复制给新的对象,使新的对象也指向同一个源对象的实例.

    在 VB.NET 中地址传递使用关键字 ByRef ,不指定关键字时默认为 ByVal 方式传递,但当使用 VB.NET 的ByVal 关键字传递一个引用型对象时,会自动的将源对象的引用指定到目标对象.

    在 C# 中地址传递使用关键字 ref, 不指定关键字时默认传值方式,同样的 C# 也会将引用类型对象的引用指定到目标对象.和 VB.NET 不同的时,当在 C# 中使用 ref 时,要在方法传入时显式注明 ref 关键字.

    另外,C# 还多了一个 out 的关键字,用于表示只作输出,和 ref 相当,但还是有不同的地方.当使用 ref 时,传入的对象必须在方法外完成初始化,而 out 则需要在方法内执行初始化,且必须被初始化,否则编译器抛出异常.

VB中的参数传递

C#中的参数传递

'值传递使用关键字:ByVal

Sub 方法名(ByVal 参数 AS 类型)
    '...代码
End Sub

'地址传递使用关键字: ByRef 
Sub 方法名(ByRef 参数 AS 类型)
    '...代码
End Sub

'使用ByVal或ByRef的执行方式都如下
方法名(传入的参数对象)

void 传入的方法名(类型 参数)
{
    //....代码
}
void 使用ref输出的方法名(ref 类型 参数)
{
    return 返回值;
}

void 使用out输出的方法名(out 类型 参数)
{
    //若整个方法都没有为out标识的对象赋值,则编译器不通过
    参数 = 值; //这里初始化
     
return 返回值;

}

//使用时如下:
传入的方法名(参数对象);

类型 参数=初始值; //这里初始化
使用ref输出的方法名(ref 参数);

类型 参数;
使用out输出的方法名(out 参数);


10.数组


11.try 错误捕获


13.属性


14.默认属性


15.VB(me/mybase) / C#(this/base) 关键字


16.三元表达式


17.可空的值类型对象


18.短路操作符

原创粉丝点击