C#高级(二)类

一、类的概述

 

类,是创建对象的模板,每个对象都包含数据,并且提供了处理和访问数据的方法。换言之,类,定义了每个对象,也就是“实例”包含什么数据和功能。

比如我们定义一个“医生”类,并且实例化一个。我们看下面的代码:

  1. using System;
  2. namespace gosoa.com.cn
  3. {
  4.     public class Doctor
  5.     {
  6.         public Doctor(){}
  7.         public Doctor(string name,byte age)
  8.         {
  9.             this._name=name;
  10.             this._age=age;
  11.         }
  12.         private string _name;
  13.         private byte _age;
  14.         public string Name
  15.         {
  16.             get{return this._name;}
  17.             set{this._name=value;}
  18.         }
  19.         public byte Age
  20.         {
  21.             get{return this._age;}
  22.              set{this._age=value; }
  23.         }
  24.         public string doSth()
  25.         {
  26.             return "我会给人治病喔~~";
  27.         }
  28.         public static string doAnth()
  29.         {
  30.             return "执行的另一个静态方法";
  31.         }
  32.     }
  33.     public class OneDoctor
  34.     {        
  35.         static void Main()
  36.         {
  37.              Doctor dc=new Doctor();
  38.              dc.Name="李四";
  39.              dc.Age=25;
  40.             Doctor dc2=new Doctor("张三",35);
  41.             Console.WriteLine(dc.Name);
  42.             Console.WriteLine(dc.Age);
  43.             Console.WriteLine(dc2.Name);
  44.             Console.WriteLine(dc2.Age);
  45.             Console.WriteLine(dc.doSth());
  46.             Console.WriteLine(Doctor.doAnth());
  47.          }
  48.     }
  49. }

       

在这个例子中,public class Doctor 便是声明了一个类。_name_age是其两个属性。doSth()是其的一个方法(即对象的行为)。 Doctor dc=new Doctor() 用来实例化了一个Doctor类,也就类似实例化了一个对象,产生了一个新医生。Doctor dc2=new Doctor("张三",35);是实例化的另外一个类,也就是另外一个医生。

Doctor类中,public Doctor(){}  public Doctor(string name,byte age) 这两个方法叫做 构造函数。是用来初始化类的,在每个类被实例化的时候,会自动调用。

public string Name

              {

                     get{return this._name;}

                     set{this._name=value;}

              }

这段代码是用来设置和获取类的属性的。也就类似java中的 getName setName 方法。只是在C#中这变得更容易了。

 

注意一点:类是存储在托管堆上的引用类型。

 

二、方法

 

       1  方法概述

方法和C语言中的 函数共享同一个理念。一直以来,我们在用的Main()方法就是个例子。还有上例中public string doSth() 也是一个方法。其中,public 类的修饰符,string是方法的返回值,也可以没有返回值,即 void doSth是方法名称。()括号必须有,在括号中可以有参数,如Doctor类的构造函数 public Doctor(string name,byte age) 就有两个参数。方法体则必须用一对{}括起来。

方法的调用,则需要先实例化类,然后调用类的某个方法。上例中Doctor dc=new Doctor();来实例化了类,然后 dc.doSth() 就是调用了Doctor类的方法。

如果方法是静态的,即 static,则不需要实例化类,直接使用 类名.方法名 就可以调用了。如上例中 Console.WriteLine(Doctor.doAnth()); 即是直接调用了静态的doAnth方法。

 

2、方法的参数

       参数可以通过引用或者值传递 给方法。具体有什么区别呢?

       我们来看个例子。

  1. using System;
  2. namespace gosoa.com.cn
  3. {
  4.     public class OneDoctor
  5.     {
  6.         static  void FunctionTest(int [] arr, int x)
  7.         {
  8.             arr[0]=100;
  9.             x=10;
  10.         }
  11.         static void Main()
  12.         {
  13.             int [] arrTemp={0,1,2,3,4};
  14.             int y=30;
  15.             Console.WriteLine(arrTemp[0]);
  16.             Console.WriteLine(y);
  17.             FunctionTest(arrTemp, y);
  18.             Console.WriteLine(arrTemp[0]);
  19.             Console.WriteLine(y);
  20.          }
  21.     }
  22. }

 

本例的输出结果是03010030 因为数组是引用类型,在调用方法前后,引用类型的修改会保留下来,而值类型的修改不会保留下来。

 

3ref 参数。

我们把 上例中的方法修改为 static void FunctionTest(int [] arr, ref int x) 这样,调用的时候 也加上 ref 即:functionTest(arrTemp, ref y); 执行后的结果就是03010010

ref 关键字是强迫参数通过引用传递。

注意:在调用有ref参数的方法时,必须将参数要传递的参数提前初始化。但在调用out参数的方法时,就不必提前初始化。

 

4out 参数

在上例中,我们稍作修改。

  1. static void FunctionTest(out int x) 
  2.         {
  3.             x=100;
  4.         }
  5.         static void Main()
  6.         { 
  7.                 int y;
  8.                 FunctionTest(out y);
  9.                 Console.WriteLine(y);
  10.         }

Maim()函数中调用FunctionTest之前,y并没有初始化。但其输出结果确实100;因为这样属于引用传递,值的修改会被保留下来。

5、方法的重载

所谓重载就是指 方法名相同,而参数不同(参数类型,参数个数)看下面一个例子

  1. using System;
  2. namespace gosoa.com.cn
  3. {
  4.     public class test
  5.     {
  6.         static int FunctionTest(int x) 
  7.         {
  8.             return x+100;
  9.         }
  10.     
  11.         static string FunctionTest(string str) 
  12.         {
  13.             return str;
  14.         }
  15.         static int FunctionTest(int x,int y) 
  16.         {
  17.             return x+y;
  18.         }
  19.         static void Main()
  20.         {
  21.                 Console.WriteLine(FunctionTest(10) );
  22.                 Console.WriteLine(FunctionTest("gosoa.com.cn") );
  23.                 Console.WriteLine(FunctionTest(5,20));
  24.         }
  25.     }
  26. }

 

在这里例子中,有三个方法functionTest 其参数都不一样。在调用的时候,系统会根据传递的参数自动选择调用哪个方法的。这就是方法的重载。

在这里注意,重载的条件是,必须参数类型不同,或者参数个数不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值