vb点虐 比较接口 vbnet invoke

VB.NET和C#逐层横向对比[1]

//全局层

成都创新互联公司专业为企业提供开平网站建设、开平做网站、开平网站设计、开平网站制作等企业网站建设、网页设计与制作、开平企业网站模板建站服务,十多年开平做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

VB支持Module 是一种全部成员都是静态的特殊类型

C#支持static class 和VB的Module类似

VB的Imports语句可以把类的静态成员导入 而C#的using语句没有这个功能Imports System Math

VB可以选择变量是否必须声明 以及类型是否必须指定(通过Option语句)C#则默认是VB最严格的状态

C#可以使用extern alias指定程序集的别名 并使用别名限定运算符::来解析类名冲突的两个程序集VB没有这个功能 但可以用Global关键字获得命名空间级别名称冲突解析能力

C#可以指定友元程序集 VB不支持

//成员层

VB可以直接重写Object Finalize方法 而C#必须采用析构函数的语法

C#可以指定attribute的target以便清楚地放置attribute 而VB则通过尖括号的位置来决定 有时候写不出某种C#可行的语法

VB能够重载这些C#不支持的运算符 ^ Like \

C#能够重载这些VB不支持的运算符 ++ !

VB中子类的构造函数 先调用父类的构造函数 然后才初始化子类的字段

C#中子类的构造函数 先初始化子类的字段 然后才调用父类的构造函数

VB的Implemnts语句可以为实现接口的方法改名 改变访问级别

C#不支持但是有一个显式实现的语法可以帮忙

VB的函数重载 子类和父类的方法视为同级C#的函数重载 子类优先于父类

VB的Main函数自动加 可以改

//继续成员层

C#的自定义event可以修改add和remove的规则

VB的自定义Event除了C#的之外 还支持重载RaiseEvent语句的用法

VB的Event可以直接书写Event参数 自动生成Delege类型

C#的event必须指定delegate类型

VB支持WithEvents/Handles静态事件绑定语法 也支持AddHandler动态绑定方法

C#的事件只支持使用+=动态绑定

VB的属性(Property)可以带参数

C#的属性不能带参数

尽管不支持手工定义 VB支持属性按引用传递值 C#不支持

VB可以指定一个带有参数的属性为Default 于是支持索引语法

C#则必须把这个东西声明为索引器 即this语法

VB允许方法带有若干可选参数(Optional)可指定默认值

C#不允许

C#支持out参数 传入前不需要初始化

VB不内置支持

C#支持类中使用fixed buffer 即固定大小的类似数组的成员

VB不支持

C#支持按照参数是否带有ref/out进行函数重载

VB不支持这种重载

C#允许仅大小写区分的两个函数或变量存在

VB不区分大小写 因此也不允许

lishixinzhi/Article/program/net/201311/15509

接口的VB.NET( 一款行业软件)接口

在VB.NET的类里,实现一个接口的语句是:

implements接口名称

例如,下面定义一个车(总称)的接口,这里的车是各种车的总称:

Public Interface ICar

Property color() As String

Property speed() As Long

Sub PrintInfo()

End Interface

然后在不同类型的“车”类里实现它:

Public Class A_Car

Implements ICar

Dim m_color As String, m_speed As Long

Public Property color() As String Implements ICar.color

Get

Return m_color

End Get

Set(ByVal Value As String)

m_color = Value

End Set

End Property

Protected Overrides Sub Finalize()

MsgBox(I was deconstructed!)

End Sub

Public Sub New()

m_color = Red

m_speed = 210

MsgBox(I was constructed!)

End Sub

Public Property speed() As Long Implements ICar.speed

Get

Return m_speed

End Get

Set(ByVal Value As Long)

m_speed = speed

End Set

End Property

Public Sub PrintInfo() Implements ICar.PrintInfo

MsgBox(Color: m_color vbNewLine Speed: m_speed, MsgBoxStyle.Information)

End Sub

End Class

在 Form 的 Load 事件中编写:

Dim myCar As New A_Car

myCar.PrintInfo()

运行之后就创建了一个 A_Car 类的实例 myCar,然后出现两个对话框,分别说明实例已经创建和汽车的信息。当窗体卸载时,这个类的实例 myCar 将自动销毁,这时将出现一个“I was deconstructed!”的对话框。

声明一个接口时,需要考虑以下几点:

1.接口主体只限于对方法,索引器以及属性的声明;

2.接口成员是隐式公开的,如果对其显式指定访问级别,就会出现编译器错误;

3.接口中不能包含字段,构造函数和常量等;

4.在接口中不能实现任何方法,属性或者索引器;

5.在指定方法时,只需要给出返回类型,名称和参数列表,然后分号结束。

面向对象的接口

在C++中,一个类被允许继承多个类。但是在Java以后的语言不被允许。

这样,如果想继承多个类时便非常困难。所以开发方想出了新办法:接口。

一个接口内,允许包含变量、常量等一个类所包含的基本内容。但是,接口中的函数不允许设定代码,也就意味着不能把程序入口放到接口里。由上可以理解到,接口是专门被继承的。接口存在的意义也是被继承。和C++里的抽象类里的纯虚函数是相同的。不能被实例化。

定义接口的关键字是interface,例如:

publicinterfaceMyInterface{

public void add(int x,int y);

public void volume(int x,int y,int z);

}

继承接口的关键字是implements,相当于继承类的extends。

需要注意的是,当继承一个接口时,接口里的所有函数必须全部被覆盖。例如:

class Demo implements MyInterface{

public void add(int x,int y){

System.out.println( +(x+y));

}

public void volume(int x,int y,int z){

System.out.println( +(x*y*z));

}

public static void main(String args[]){

Demo d=new Demo();

d.add(10,20);

d.volume(10,10,10);

}

}

输出结果:

30

1000

当想继承多个类时,开发程序不允许,报错。这样就要用到接口。因为接口允许多重继承(,),而类不允许。所以就要用到接口。

C#/VB点虐 如何判断对象是否实现了某个接口?

对象 is 接口名

实现了就返回true

否则返回false

例如

ArrayList list = new ArrayList();

Console.WriteLine(list is ICollection);//输出true

另外根据你的描述我觉得还可以使用as关键字来实现

还是拿我上面的例子

ICollection collection = list as ICollection;//如果list实现了ICollection接口,list会被转型成为ICollection,否则返回null

if(collection != null){

collection.Sort();

}


新闻名称:vb点虐 比较接口 vbnet invoke
网站URL:http://pwwzsj.com/article/ddjscgo.html