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