您的位置: 网站首页 > 程序开发 > C#程序设计 > 第6章 C#面向对象 > 【6.4 方 法】

6.4 方 法

 

方法表示类可以做的事情,类拥有的功能。如前文中介绍的汽车类,拥有方法Run,表示汽车可以启动,可以行驶。本节介绍方法的其他内容。

6.4.1  方法的参数

方法可以带参数,也可以不带参数。方法是否带参数应该根据程序的实际需要进行选择。下面介绍两个实例演示不带参数和带参数方法的定义方法。

1.目的说明

创建一个Windows控制台应用程序,创建几个不同的方法。

2.实现步骤

1)创建一个名为MethodPara的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace MethodPara

{

    class Program

    {

        static void Main(string[] args)

        {

            MyClass myClass = new MyClass();

            myClass.MyMethod1();

            myClass.MyMethod2("wang");

        }

    }

    class MyClass

    {

        /// <summary>

        /// 方法1,输出“Thank You!

        /// </summary>

        public void MyMethod1()

        {

            Console.WriteLine("Thank You!");

        }

 

        /// <summary>

        /// 方法2,输出“Thank You!”加参数值

        /// </summary>

        /// <param name="m">想要输出的值</param>

        public void MyMethod2(string m)

        {

            Console.WriteLine("Thank You! {0}!", m);

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图6-12所示。

6-12  运行结果

4.代码分析

代码中定义了两个方法MyMethod1MyMethod2。其中MyMethod1不带参数,直接输出“Thank You!”,MyMethod2带一个字符串参数,输出时输出“Thank You!”加参数。从本质上讲两个方法没有区别,但带参数的方法使得代码更加灵活一些。

6.4.2  使用构造函数

构造函数是在类的实例被创建时自动被执行的方法,在该方法中可以进行一些初始化的工作。该方法的特点是和类名同名,构造函数可以与普通方法一样自由选择是否带参数。下面介绍一个实例,演示构造函数的使用方法。

1.目的说明

创建一个Windows控制台应用程序,创建几个不同的构造函数。

2.实现步骤

1)创建一个名为MethodConstruct的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace MethodConstruct

{

    class Program

    {

        static void Main(string[] args)

        {

            Cars a = new Cars();

 

            Cars b = new Cars("法拉利");

 

            Cars c = new Cars(3);

 

            Cars d = new Cars("奔驰", 5);

        }

    }

 

    class Cars

    {

        /// Farmer类的无参数构造函数

        public Cars()

        {

            Console.WriteLine("一个新的Cars!");

        }

 

        /// Farmer类的带参数构造函数

        public Cars(string m_Name)

        {

            Console.WriteLine("一个新的名为{0} Cars!", m_Name);

        }

 

        /// Farmer类的带参数构造函数

        public Cars(int m_age)

        {

            Console.WriteLine("一个新的寿命为{0} Cars!", m_age);

        }

 

        /// Farmer类的带参数构造函数

        public Cars(string m_Name, int m_age)

        {

            Console.WriteLine("一个新的寿命为{0} 名为{1} Cars!", m_age,

m_Name);

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图6-13所示。

6-13  运行结果

4.代码分析

代码中定义了几个构造函数,在定义Cars类实例时选用了不同的构造函数。因此,在输出时产生了不同的结果。

6.4.3  使用析构函数

析构函数用于析构类的实例,析构是指在回收对象中无用的资源。C#中一个类只能有一个析构函数,并且无法调用析构函数,它们是被自动调用的。这是由于.NET Framework实行了一种垃圾回收机制,.NET Framework决定何时回收对象中的资源。

一般不需要编写析构函数,下面通过一个实例介绍析构函数的使用方法。

1.目的说明

创建一个Windows控制台应用程序,创建析构函数。

2.实现步骤

1)创建一个名为MethodDestroy的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace MethodDestroy

{

    class Program

    {

        static void Main(string[] args)

        {

            //调用无参数构造函数创建myFarmer1

            Cars myFarmer1 = new Cars();

        }

    }

 

    class Cars

    {

        // Cars类的无参数构造函数

        public Cars()

        {

            Console.WriteLine("一个新的Cars类被创建!");

        }

 

        //  Cars类的析构函数

        ~Cars()

        {

            Console.WriteLine("一个Cars类对象被析构!");

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图6-14所示。

6-14  运行结果

4.代码分析

可以看到,无需显式的调用析构函数,.NET框架会自动地析构该对象。

6.4.4  使用静态方法

静态方法无需创建类实例即可使用,声明和创建一个静态方法需要使用static关键字。下面通过一个实例演示静态方法的使用。

1.目的说明

创建一个Windows控制台应用程序,创建静态方法。

2.实现步骤

1)创建一个名为MethodStatic的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace MethodStatic

{

    class Program

    {

        static void Main(string[] args)

        {

            //无需创建MyClass的实例

            MyClass.MyMethod();

        }

    }

 

    class MyClass

    {

        public static void MyMethod()

        {

            Console.WriteLine("这是一个静态方法!");

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图6-15所示。

6-15  运行结果

4.代码分析

可以看到,无需创建类MyClass的实例,直接使用类名加方法名的方式可以访问该静态方法。

6.4.5  重载方法

重载方法是一种很有效的代码组织形式。如大部分常见的数值类型都可以进行加法,但一般是同种数据类型的数据相加。如果不能使用重载,那么需要为每一种类型实现不同的方法,并提供不同的方法名称。

使用重载方法的优点是可以使这些方法具有统一的名称,方便代码的使用。下面通过一个实例演示方法重载的优点。

1.目的说明

创建一个Windows控制台应用程序,演示方法的重载。

2.实现步骤

1)创建一个名为MethodOverload的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace MethodOverload

{

    class Program

    {

        // 求两个双精度浮点数的和

        static double Add(double x, double y)

        {

            return x + y;

        }

 

        // 求两个整数的和

        static int Add(int x, int y)

        {

            return x + y;

        }

 

        // 连接两个字符串

        static string Add(string x, string y)

        {

            return x + y;

        }

 

        static void Main(string[] args)

        {

            Console.WriteLine("5 + 3 的值为:{0}", Add(5, 3));

 

            Console.WriteLine("5.3 + 3.5 的值为:{0}", Add(5.3, 3.5));

            Console.WriteLine("Thank+ You! 的值为:{0}", Add("Thank ", "

You!"));

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图6-16所示。

6-16  运行结果

4.代码分析

可以看到,所有3种类型数据的加法均使用了同一个名称即Add。这3种方法的名称相同,但参数不同。C#提供的这种方法重载的机制可以自动识别所需调用的方法,非常方便。

6.4.6  访问父类方法

当在子类中需要调用父类中的方法时,可以使用base关键字。base关键字用于表示被继承的类。下面通过一个实例演示访问父类中的方法。

1.目的说明

创建一个Windows控制台应用程序,演示访问父类中的方法。

2.实现步骤

1)创建一个名为MethodParent的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace MethodParent

{

    class Program

    {

        static void Main(string[] args)

        {

            MyClass2 a = new MyClass2();

            a.Method2();

        }

    }

    class MyClass1

    {

        public void Method1()

        {

            Console.WriteLine("父类方法!");

        }

    }

 

    class MyClass2 : MyClass1

    {

        public void Method2()

        {

            base.Method1();

 

            Console.WriteLine("子类方法!");

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图6-17所示。

6-17  运行结果

4.代码分析

MyClass2中只包含一个Method2方法。在该方法中包含了base关键字调用父类的Method1方法,因此在结果中不仅输出了“子类方法!”,还输出“父类方法!”。