打印本文 打印本文 关闭窗口 关闭窗口
VB.NET VS C#.
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4289  更新时间:2009/4/23 19:01:51  文章录入:mintao  责任编辑:mintao
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,NotInheritableOverridable,OverridesShadows

當一看到程式碼想要了解它在做啥事,特別是剛畢業的新程式設計師要接舊程式時,如欲他迅速上手並解決模糊不清的錯誤,或想增加新功能時,哪一種語法較容易理解?

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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口