Main()
Dim b As New BClass()
Dim i As Iint
i = b
b.x()
i.x()
Console.ReadLine()
End Sub
End Module
VB.NET 需要使用 Implements 關鍵字來明確定義哪個方法實做哪個介面方法。事實上,你可以一個方法來實做多個不同的介面方法,如果介面定義如下:
Interface Iint
Function x() As Integer
Function y() As Integer
End Interface
你可以一個方法實做這兩個,程式範例如下
Private Function IintX() As Integer Implements Iint.x, Iint.y
Console.WriteLine("在介面上的 x")
End Function
當你有兩個相似的介面並共享許多相同的方法,這個實做方式就很有用。
對物件語法的判決
程式語法對程式設計師來說是信仰問題,大家都比較喜歡自己熟悉的語法,其實沒啥好評斷的。
從以上的描述中你也可以發現其實這兩的語言的差異性很小,兩者都有相似的功能。
但無論如何,我必須在物件語法上判 VB.NET 贏,就以以下繼承語法來看
public class BClass:AClass,Iint
與
Public Class BClass
Inherits AClass
Implements Iint
以及以下控制繼承的關鍵字
abstract,sealed,virtual,new
與
MustInherit,NotInheritable 與 Overridable,Overrides 和 Shadows
當一看到程式碼想要了解它在做啥事,特別是剛畢業的新程式設計師要接舊程式時,如欲他迅速上手並解決模糊不清的錯誤,或想增加新功能時,哪一種語法較容易理解?
Visual Basic.NET
雖然兩者差不多,但 VB.NET 贏得這一項。
事件(Events)
在 C# 你必須要完成很多的動作後才能定義事件,第一步你必須要宣告事件所需的 delegate type 如下
public delegate void ChangedEventHandler(object sender, EventArgs e);
這定義了事件的 signature(參數和參數型態)。 e 參數是繼承自 EventArgs class 的任意 class 以包含事件參數的各種欄位。
接著 Class 要定義一個該 delegate 型態的事件變數
public event ChangedEventHandler Changed;
要觸發這個事件,Class 呼叫
Changed(this,TheEventArguments);
要承接這個事件,使用者程式必須要定義一個與 delegate signature 相同的函數
private void ObjectChanged(object sender,EventArgs e)
{
Console.WriteLine(e.ToString);
}
並且需要連結這個函數與發出事件 delegate 的物件
a.Changed+=new ChangedEventHandler(ObjectChanged);
譯者註:整個架構如下
namespace ConsoleApplication2
{
using System;
public class EvtArg:System.EventArgs
{
public string strEvt;
public EvtArg(string strIn)
{
strEvt=strIn;
}
}
public delegate void ChangedEventHandler(object sender, EvtArg e);
public class AClass
{
public event ChangedEventHandler Changed;
public virtual int x()
{
Console.WriteLine("在基礎 Class 的 x 以 Changed 觸發事件");
Changed( this,new EvtArg("事件原因..."));
return(0);
}
}
class EvtHand
{
public void ObjectChanged(object sender,EvtArg e)
{
Console.WriteLine("ObjectChanged 處理事件:" + e.strEvt);
}
}
class Class1
{
static void Main(string[] args)
{
AClass a = new AClass();
EvtHand h= new EvtHand();
a.Changed+= new ChangedEventHandler(h.ObjectChanged);
a.x();
Console.ReadLine();
}
}
}
一剛開始這一定會造成困擾,就算使用一陣後仍不太能夠適應。
VB.NET 的程式設計師可以用完全相同的方式觸發事件,另外也可以使用與 VB6 相容的傳統方式觸發事件,在 Class 中可以定義事件如下
Event Changed()
你可以使用任何你想定義的事件 signature,一般會用 Sender,EventArgs 的技巧如下
Event Changed(Byval Sender As Object,ByVal e As EventArgs)
觸發事件可以透過 RaiseEvent 關鍵字
RaiseEvent Changed()
使用事件的物件可以宣告如下
Dim WithEvents b As BClass
並透過以下的方式將處理事件的方法和事件連結起來
Sub EventHandle() Handles b.Changed上一页 [1] [2] [3] [4] 下一页 [Web开发]VS2005+SQL2005之.NET2.0数据库连接 [Web开发]VS2008和.NET3.5Beta2新特性(介绍及下载地址) [Web开发]通过VS2005如何发布网站 [Web开发]VS2005安装了SP1后发布项目存在的问题之解决方案 [Web开发]VS2005如何建立(新建)网站项目 [Web开发]图文解说—如何通过VS2005测试网站程序性能 [系统软件]M$ Expression VS MM Studio [常用软件]GB VS Maxthon之群组功能 群组 [VB.NET程序]定制VB.NET控件编程之拦截击键动作 [VB.NET程序]VB.NET 中调用浏览目录对话框
|