专注

导航

面向对象基础一

一、类与实例
首先我做一个实验,点击一个“猫叫”的按钮,会弹出小猫的叫声“喵”的提示框!
这个实在很简单

MessageBox.Show("喵"); 

 

问题一:如果需要点击另外一个按钮,也让他弹出小猫的叫声“喵”的提示框!
解决方法:增加一条语句:MessageBox.Show("喵");
问题:这样子就会重复了,
解决方法:我们需要些一个函数,其他需要的地方直接调用。

   1:  string Shout() 
   2:  { 
   3:      return "喵"; 
   4:  } 

 

问题:如果别的窗口要用的话,怎么办?
解决:public string Shout()
但是,Shout放在这个窗口中不合适,就好比居委会的电视机,放在你家,当然都可以来看,但是如果放在居委会会更好,所以,我们这里要用到类,如:

   1:         class Cat 
   2:          { 
   3:              public string Shout() 
   4:              { 
   5:                  return "喵"; 
   6:              } 
   7:          } 

 

这样子猫叫提示框的代码就是:
   1:    Cat cat = new Cat(); 
   2:    MessageBox.Show(cat.Shout()); 

 

简单的讲,这就是类。

2、构造函数
还是上面的小猫,如果我们希望小猫应该有一个姓名,比如叫"咪咪",当咪咪叫的时候,最好是能够提示出名字,是那只猫在叫,这个时候,我们就要考虑构造方法了。
构造方法,又叫构造函数,其实就是对类进初始化。构造方法和类同名,无返回值,也不需要Void,在new的时候调用。
如:Cat cat = new Cat();中,new 后面的Cat()其实就是构造方法。
这种情况是这样子的,所有的类都有构造方法,如果你不编写代码,系统会默认生成空的构造方法,如果你定义了构造方法,那么默认的构造方法就自动失效了。我把上述的类改一下:

   1:          class Cat 
   2:          { 
   3:              private string Name = ""; 
   4:              public Cat(string name) 
   5:              { 
   6:                  Name = name; 
   7:              } 
   8:               
   9:              public string Shout() 
  10:              { 
  11:                  return "我的名字叫" + Name + ",喵"; 
  12:              } 
  13:          } 

 

那么在点击按钮的时候,代码就会变成:
   1:   Cat cat = new Cat("咪咪"); 
   2:   MessageBox.Show(cat.Shout()); 

 

3、方法重载
还是上面的例子,如果事先猫没有姓名,那么怎么办了?这个时候,我们就要用到方法的重载。
方法的重构其实很简单:就是提供了创建同名的多种方法的能力,但是这些方法需要使用不同的参数类型。当然这种重载不单单是构造方法可以,其他普通的方法也可以重载。

   1:          class Cat 
   2:          { 
   3:              private string Name = ""; 
   4:              public Cat(string name) 
   5:              { 
   6:                  Name = name; 
   7:              } 
   8:              public Cat() 
   9:              { 
  10:                  Name = "无名"; 
  11:              } 
  12:              public string Shout() 
  13:              { 
  14:                  return "我的名字叫" + Name + ",喵"; 
  15:              } 
  16:          } 

 

这样子调用
Cat cat = new Cat("咪咪"); 
Cat cat = new Cat(); 
方法重载要注意的是,方法名要相同,但是参数类型或者个数必须有所不同,否则重载就没哟意义了。 
如果,我们只要需要分清楚猫的姓和名,还可以重载 
public Cat(string firstName,string lastName) 
如果要让猫叫的次数改变,他叫几声,要如何做呢? 
当然你可以再构造方法里面加一个叫的次数,但是叫几声其实不必在实例化的时候声明,我们可以之后在规定,这个时候,我们需要用到的属性。 

4、属性与修饰符
属性是一个方法或者一对方法,但在调用他的代码看来,他是一个字段,即属性适合于一字段的方法使用方法调用的场合。上面的类可以添加:

   1:              private int shoutNum = 3; 
   2:              public int ShoutNum 
   3:              { 
   4:                  get 
   5:                  { 
   6:                      return shoutNum; 
   7:                  } 
   8:                  set 
   9:                  { 
  10:                      shoutNum = value; 
  11:                  } 
  12:              } 

 

这里需要说明的是get和set,因为这个东东很多地方要用到,不理解他的意思是肯定不行的。
get表示外界调用时可以得到shoutNum的值;
set表示外界可以给内部的shoutNum赋值;
当然,如果我们把shoutnum改成public也可以,但是这样子就会存在这样子一种现象:
比如你修建了一个房子,你把他设置成为public,那么这个房子就是透明的了,什么东西外部都可以看得到,实际上这个房子大部分是墙,只有少部分是门和窗。所以我只希望门和窗式public的,其余的都是private,对于房子来说,门和窗式可以控制的。这就是讲,只有当门和窗打开的时候,才可以让别人看到。
换一句话说,如果shoutnum是public,那么任何时候都可以改,但是,如果改成属性,那就很好控制了。
当然,我们可以控制叫声的次数:

   1:              public int ShoutNum 
   2:              { 
   3:                  get 
   4:                  { 
   5:                      return shoutNum; 
   6:                  } 
   7:                  set 
   8:                  { 
   9:                      if (value <= 10) 
  10:                          shoutNum = value; 
  11:                      else 
  12:                          shoutNum = 10; 
  13:                  } 
  14:              } 

 

这个时候,Shout()的方法也要改了

   1:             public string Shout() 
   2:              { 
   3:                  string result = ""; 
   4:                  for (int i = 0; i <= shoutNum; i++) 
   5:                  { 
   6:                      result += "喵 "; 
   7:                  } 
   8:                  return "我的名字叫" + Name + "," +result; 
   9:              } 

 

调用的时候可以这样子写 
      Cat cat = new Cat("咪咪"); 
      cat.ShoutNum =8; 
      MessageBox.Show(cat.Shout()); 
这个时候猫叫9声 
如果不要cat.ShoutNum = 8;那么猫叫4声;

posted on 2011-11-13 12:20  陈啊M  阅读(203)  评论(0编辑  收藏  举报