3.5 类的方法

  创建了类,就需要创建类的字段,初始化字段。同样,创建了类之后也需要创建类的方法,来访问或者对字段进行操作。在类的对象的初始化后,对象能够使用方法进行对象的操作从而能够更加完整的描述一个对象(事务)。

3.5.1 编写方法
  方法是指定名称的一组语句,每个方法都有一个方法名和一个方法体。方法名用来指定方法的名称,方法体用来描述该方法使用何种算法和结构来完成计算。对方法名的声明推荐具有一定的含义,例如GetUserPassword的大意就是获取用户密码,这样其他的开发人员也能够读懂该函数的作用,提高了编码效率。方法的声明语法如下所示。
描述 权限 返回值类型 方法名称(参数)
{
 方法体
}
  上述伪代码说明了方法的声明语法,开发人员能够参照以上伪代码进行方法的编写,示例代码如下所示。
+展开
-C#
        static public string GetUserName()//返回值类型为string
        {
            string username = "guojing";//定义字符串变量
            return username;//返回string类型
        }

  编写一个方法必须按照方法声明的语法来编写,在编写方法时需要指定描述、权限、返回值类型等,这些必要的条件作用如下所示。
?1)描述:用来描述方法,例如是否是静态方法等。
?2)权限:权限用来描述方法的访问性,确定外部对象是否能引用或直接访问此方法或类成员。
?3)返回值类型:返回值类型用来描述方法体中所返回的值的类型。
?4)方法名称:描述方法的命名称。
?5)参数:参数用来向方法传递参数,可以为0个或多个参数,多个参数用逗号分割。
?6)方法体:用来描述方法所要执行的操作。

  如果创建了一个方法,并且说明了该方法必须有返回值,则该方法的必须有返回值并且返回值的类型与声明的方法的返回值类型相同。若方法中的返回值和修饰符中返回值的修饰不相同,则编译器会报错,若方法无返回值,可使用void关键字修饰方法,示例代码如下所示。
+展开
-C#
        static public void  GetUserName()//无返回值的方法
        {
            string username = "guojing";//初始化字段
        }


3.5.2 给方法传递参数
  上一节中,了解了方法可以传递参数。通过参数的传递,开发人员能够知道方法的作用、方法的意义并通过传递参数对未知源代码的方法进行使用而无需阅读源代码。带参数传递的方法代码编写如下。
+展开
-C#
        static public string  GetUserName(string name)//有返回值有参数的方法
        {
            string username = name;//初始化字段
            return username;//返回一个返回值
        }

  上述代码创建了一个包含参数传递的方法。当传递了一个参数,方法接收了变量值的拷贝,然后使用拷贝的变量值进行操作。

1.传递值
方法可以接收传递的值,并获取参数,示例代码如下所示。
+展开
-C#
    class Program
    {
        public void  GetUserName(string name)//包括参数传递的方法
        {
            string username = name;//内部变量赋值
        }
        static void Main(string[] args)
        {
            Program pro = new Program();//创建一个新对象
            pro.GetUserName("guojing");//传递了一个值
        }
    }

  上述代码创建了一个类,并在类中创建了一个GetUserName方法,包含一个参数传递。在创建了一个对象后,可以直接通过传递值来传递参数。

2.传递对象
  方法也可以接收对象,对象也可以看作是一个变量进行参数传递,示例代码如下所示。
+展开
-C#
    class Program
    {
        public string name;//声明共有变量
        public void  GetUserName(Program pro)//声明共有方法
        {
            string username = pro.name;//初始化字段
        }
        static void Main(string[] args)
        {
            Program pro = new Program();
            pro.name=”guojing”//初始化字段
            pro.GetUserName(pro);//传递了一个对象
        }
    }

  上述代码包含一个参数传递,该参数是一个对象。

3.this关键字
  this关键字能够访问类成员,当参数名和类成员中字段名称相同时,可以使用this关键字,示例代码如下所示。
+展开
-C#
    class Program
    {
        public string name;//声明共有变量
        public void  GetUserName(string name)
        {
            this.name = name;//使用this关键字赋值私有变量
        }
        static void Main(string[] args)
        {
            Program pro = new Program();//创建一个新对象
            pro.GetUserName("guojing");//使用方法进行参数传递
        }
    }

  上述代码中,方法传递的参数名称为name,同样类内有一个name为名称的字段,通过this关键字可以区分,this.name就是类中的name字段。

3.5.3 通过引用来传递参数
  通常情况下,方法只能返回一个值,但是在实际的开发当中,实际的情况可能需要返回多个值的方法。所以,传递一个变量的引用给一个方法即可实现。在平常使用的过程中,传递的参数在方法中是以参数的值的拷贝来运算的。当使用引用时,方法使用的是参数的实际数值,对参数的改变也会改变参数的实际值。

1.使用ref关键字
在描述一辆车的时候,可以创建一个Car类来描述车这个对象,示例代码如下所示。
+展开
-C#
    class Car
    {
        string carNumber="1001";
        string carType = "Car";
        public string GetCarNum(string num,string type) //创建方法
        {
            num = carNumber;//获取私有变量的值
            type = carType;//获取私有变量的值
            return num;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Car myCar = new Car();//创建一个新对象
            string number="0";//初始化对象
            string type = String.Empty;//String.Empty初始化空字符串
            myCar.GetCarNum(number, type);//改变字符串的值
            Console.WriteLine(number);//输出
            Console.WriteLine(type);
            Console.ReadKey();
        }
    }

  上述代码运行结果中,输出的number依旧是0,而type依旧是空字符串。上述代码并没有为多个变量参数进行更改,所以需要使用ref关键字来对多个对象进行更改,示例代码如下所示。
+展开
-C#
    class Car
    {
        string carNumber="1001";//声明字符串变量
        string carType = "Car";//声明字符串变量
        public string GetCarNum(ref string num,ref string type)//使用ref关键字
        {
            num = carNumber;//获取私有变量的值
            type = carType;//获取私有变量的值
            return num;//返回字符串变量
        }
    }
    class Program
    {
        static void Main(string[] args)//程序的主入口方法
        {
            Car myCar = new Car();//创建一个新对象
            string number="0";//将number赋值为0
            string type = String.Empty;//将type赋值为空
            myCar.GetCarNum(ref number,ref type); //使用ref关键字
            Console.WriteLine(number);//输出字段
            Console.WriteLine(type);//输出字段
            Console.ReadKey();//等待用户按键
        }
    }

  上述代码使用了ref关键字,运行后,number和type的值都被改变了。在声明的方法参数前,必须使用ref关键字,非常重要的一点是,在使用该方法时,同样需要使用ref关键字修饰参数。

技巧:在这里carNumber并不是一个int型变量,原因是虽然汽车编号大部分是以数字显示的,但是其实是字符串,一辆车的编号为1001并不代表这辆车是第1001辆车或其他。

2.赋值明确
  在C#中,传递给方法的变量必须在传递前明确赋值,这样可以避免在执行方法时变量未赋值导致的不可预知的错误。因为有可能一个变量的值为null,而null值不能转换到.NET中的某些类型,例如上一小结的代码中,若不对number赋值为“0”,则编译器会报错。

3.5.4 方法的重载
  在程序开发过程中,很多情况下,需要执行相同的函数体。例如在获取用户信息时,有的时候需要对用户的ID进行查询再获取用户信息,有的时候需要通过对用户的用户名来获取用户信息,可以用以下代码来实现。
+展开
-C#
        public void GetUserInfor(string name)//一个方法
        { 
            //通过用户名获取用户信息
        }
        public void GetUserInforById(int id)//重载方法
        {
            //通过ID获取用户信息
        }

  当一个功能需要加强的时候,就要写更多的方法。当这些方法的方法体大致上是相同的时,或者这当些方法体都能够表示这个方法名的意义时,就可以使用重载来增强代码的可读性。只要传递的参数不同,就可以重载函数,示例代码如下所示。
+展开
-C#
        public void GetUserInfor(string name)//原方法
        { 
            //通过用户名获取用户信息
        }
        public void GetUserInfor(int id)//方法名相同但是参数不同
        {
            //通过ID获取用户信息
        }

  上述代码创建了两个相同方法名的方法,但是传递的参数不同,编译器也可以通过编译。当调用方法时,指定具体的调用参数,则编译器会调用相应的方法,示例代码如下所示。
+展开
-C#
            UserInformation user = new UserInformation();//创建对象
            user.GetUserInfor("guojing"); //调用第一个方法
            user.GetUserInfor(115);//调用重载方法

  当声明对象后,对象使用方法,根据传递的参数不同,编译器会自动识别,如传递的参数为字符串变量guojing时,则会使用GetUserInfor(string name)方法。同样,如传递的参数为整型变量115时,则会使用GetUserInfor(int di)方法。在类设计中,可以将一些具有相同功能的方法设计为重载方法。使用重载的情况如下所示:
1)设计一些相同的方法时,如果只是参数不同,则使用重载。
2)如果为程序添加一个新功能,重载一个方法是不错的选择。
3)如要实现类中相似的功能,则可以考虑使用重载。

加支付宝好友偷能量挖...


评论(0)网络
阅读(80)喜欢(0)Asp.Net/C#/WCF