C#、VB.NET類的具體使用


類的具體使用

  1. 靜態成員、非靜態成員

    1:靜態成員:使用static關鍵字聲明靜態成員(VB.NET使用Shared聲明靜態成員)。靜態成員屬於類,能由該類的所有實例所共享。

    2:非靜態成員:無關鍵字聲明,則默認為非靜態成員。非靜態成員屬於類的實例——對象

    3:使用:

    C#:

              public static int MyInt_1 = 0;//靜態成員

public int MyInt= 0;//使用public允許外部類訪問

VB.NET:

              Public Shared MyStr_1 As String '靜態成員類共有

Public MyStr As String '非靜態成員,屬於類的實例——對象

  1. 類的屬性

1:屬性中包含兩個塊:set和get,set塊負責屬性的寫入工作,get塊負責屬性的讀取工作。在兩個塊中都可以做一些其他操作,如在set中驗證賦的值是否符合要求並決定是否進行賦值。當缺少其中一塊時屬性就只能讀或只能寫,set和get塊中屬性必需有一個,因為即不能讀又不能寫的屬性是沒有意義的。

2:屬性的使用

         C#:

public string Name_2

{

get { return MyStr; }//可在get,set訪問器中

set { MyStr = value; }

}

                    public string Name_3//省略語句

{

get ;set;

}

      VB.NET:

       Property Name_1 As String

Get '讀取

Return MyStr

End Get

Set(value As String) '寫入

MyStr = value

End Set

            End Property

  1. 同類中方法的重載

    1:定義:一個類中的方法與另一個方法同名,但是參數表不同,這種方法稱之為重載方法。(注:VB.NET中重載同樣可以應用到父類與子類當中。即子類重載了父類的方法。對於同類之間的重載可以用overloads關鍵字,也可省略不用。)

    2:如下所示:

    C#:

    public void TestMath_2(int flag)

    {

    Console.WriteLine("調用類TestClassTestMath_2方法:" + flag);

    }

    public void TestMath_2() //TestMath_2方法的重載(若調用方法TestMath_2時,有時需要參數flag,有時又不需要參數flag,可重構該方法,依實際情況選擇調用)

    {

    Console.WriteLine("調用類TestClassTestMath_2方法(無參數)" );

                                      }

VB.NET:

Sub TestMath_2(ByVal flag As Integer) '作用域默認為Public

Console.WriteLine("調用類TestClassTestMath_2方法:" & flag) '不同類型之間的連接時需用連接 &

End Sub

Sub TestMath_2() '重載方法TestMath_2

Console.WriteLine("調用類TestClassTestMath_2方法(無參數)")

End Sub

'等同於上述的方法重載

Sub TestMath(Optional flag As Integer = 0) '通過Optional關鍵字表明參數flag可省略,此時默認flag=0

If (flag = 0) Then

Console.WriteLine("調用類TestClassTestMath方法(無參數)")

Else

Console.WriteLine("調用類TestClassTestMath方法:" & flag)

End If

           End Sub

3:當分別調用方法:

C#:

              TestClass.Instance().TestMath_2(i);//有參數

TestClass.Instance().TestMath_2();//無參數

VB.NET:

              TestClass.Instance().TestMath_2(100) '有參數

              TestClass.Instance().TestMath_2() '無參數

              TestClass.Instance().TestMath(200) '有參數

TestClass.Instance().TestMath() '無參數

4:運行結果圖:

  1. 子類對父類方法的重寫與覆蓋

    1:重寫定義:用關鍵字 virtual 修飾父類的方法,叫虛方法,此虛方法可以在子類中用override 聲明同名的方法,這叫"重寫"。 重寫會改變父類方法的功能(VB.NET使用Overridable表明父類方法可被改寫)

    2:重寫如下所示:

    C#:

    public virtual void TestMath_3()//使用關鍵字virtual表明方法TestMath_3允許被子類重寫。

    {

    Console.WriteLine("調用類TestClassTestMath_3方法");

                                  }

……

public override void TestMath_3()

{

Console.WriteLine("調用類TestClass_1TestMath_3方法:重寫父類TestClass的方法TestMath_3");

}

VB.NET:

 

Public Overridable Sub TestMath_3() '使用Overridable表明方法允許被子類重寫

Console.WriteLine("調用類TestClassTestMath_3方法")

End Sub

Public Overrides Sub TestMath_3() '子類重寫父類的方法

Console.WriteLine("調用類TestClass_1TestMath_3方法:重寫父類的方法")

End Sub

3:覆蓋定義:在子類中用 new關鍵字修飾定義的與父類中同名的方法,叫覆蓋。 覆蓋不會改變父類方法的功能。

(注:VB.NET無覆蓋,但提供了Overrides重載父類方法來達到與覆蓋相同的功能。)

4:覆蓋如下所示:

C#:

public static TestClass Instance()//使用static表明方法Instance屬於類TestClass,無static表明屬於類的實例——對象。

{

TestClass MyTestClass = new TestClass();

Console.WriteLine("實例化類TestClass");

return MyTestClass;

}

public static new TestClass_1 Instance()//方法的覆蓋(覆蓋:使用關鍵字new,用以覆蓋父類的方法Instance,阻止TestClass_1調用父類TestClass的方法Instance)

{

TestClass_1 MyTestClass = new TestClass_1();

Console.WriteLine("實例化類TestClass_1");

return MyTestClass;

           }          

VB.NET:

Public Shared Function Instance() As TestClass '使用shared關鍵字,聲明類的靜態成員

Dim MyTestClass = New TestClass()

Console.WriteLine("實例化類TestClass")

Return MyTestClass

End Function

Public Overloads Shared Function Instance() As TestClass_1 '使用Overloads,來避免被父類TestClass的方法Instance覆蓋子類的Instance

Dim MyTestClass = New TestClass_1()

Console.WriteLine("實例化類TestClass_1")

Return MyTestClass

End Function

5:重寫與覆蓋的區別:重寫會改變父類方法的功能,覆蓋不會改變父類方法的功能。

C#:

TestClass.Instance().TestMath_3();

TestClass_1.Instance().TestMath_3();

TestClass MyTestClass = new TestClass_1();

MyTestClass.TestMath_2();//覆蓋的方法TestMath_2任然調用父類TestClass的方法TestMath_2

MyTestClass.TestMath_3();//重寫的方法TestMath_3調用子類TestClass_1的方法TestMath_3

VB.NET:

TestClass.Instance().TestMath_3()

TestClass_1.Instance().TestMath_3()

'使用子類來聲明一個父類

Dim MyTestClass As TestClass = New TestClass_1()

                  MyTestClass.TestMath_2() '對象MyTestClass調用的任然是父類的方法(覆蓋)

                  MyTestClass.TestMath_3() '對象MyTestClass調用的是子類的方法(重寫)

6:運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM