温故而知新 C# 面向对象

      说到面向对象 首先谈到的就是 类与对象的关系。

  1. 类: 类是一个抽象的概念,具有相同特性类别的统称。 比如  电器 就可以理解成一个类,但是 它只是一个抽象的词,冰箱,电视,洗衣机,都可以统称为 电器。更直白的说就是 平时所理解的 分类 。

      2. 对象: 总有那么句话 世间万物皆对象。 其实就是 每一个类中 具体到一个事物。比如上面说的 电器 类。如果具体到 冰箱。那么冰箱就是一个对象。他有各项属性,价格,颜色,体重等。这就是一个对象。

      3. 面向对象:其实面向对象就是 对某一个类的 实例 的操作。面向对象有三大特性:封装,继承,多态。

      那么为什么要有面向对象?     

    (1)增加代码重用。

    (2)降低维护负担,将具备独特性质的代码封装起来,修改程序时,相互不会影响。

  4. 重点说说面向对象的三大特性: 封装,继承,多态。

     (1)封装:顾名思义,其实就是将零散的 代码封装在一个方法 或 类中。常见的方法,属性 的封装。

       比如下面 代码 枚举中就可以看成一个封装,这样就能有通用性,每次使用只需要调用  这个枚举 EnumSortID 来取其中的值。

 1     public class Animals
 2     {
 3         /// <summary>
 4         /// 分类Enum
 5         /// </summary>
 6         public enum EnumSortID
 7         {
 8             /// <summary>
 9             /// 房屋及建筑物类
10             /// </summary>
11             [Remark("房屋及建筑物类")]
12             FW = 1,
13 
14             /// <summary>
15             /// 专业设备类
16             /// </summary>
17             [Remark("专业设备类")]
18             ZY = 2 
19 
20         }
21     
22     }

 

   (2)继承:通俗的说法 子承父业 。 继承了父类的 方法 等。 看下面的代码:

View Code
 static void Main(string[] args)
        {
            Father fat = new Father(2, 3);
            int asd = fat.ages(2);
            //通过继承后 子类可以调用父类中 的方法,当然私有方法除外
         child chi = new child();
            chi.ages(23);

           
        }

//父类
    public class Father
    {
        
        public Father(int dfs, int sdf)
        {

        }
         
        public int age
        { get; set; }

        public int ages(int age)
        {
            return age + 2;
        }
    }

    //基类继承父类
    public class child : Father
    {
        public decimal dse { get; set; }
        public child()
            : base(2, 3)
        {
 
        } 
        public void chil() 
        {
            int de =base.age;
           
            Console.WriteLine("Animal eats");
        }
        
    }

        (3)多态:  通过继承实现的不同对象调用相同的方法,表现出不同的行为,或者 同一个方法在不同的类中有不同的实现体 称为多态前面说的 封装、继承在实际工作中 随处可见,但是多态可能就比较少了。

         这里说说实现多态的两种方法 abstract(抽象方法),virtual(虚方法)。

       首先,先理解他们的作用: virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。

       1.)它们共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的。毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的。

             必须使用override关键字来重写方法。

     2.)他们的区别:virtual(虚方法必须有具体的实现)而abstract(抽象方法没有具体实现)。如下代码。在定义abstract(1. 抽象方法的时候要注意,必须定义在抽象类中,否则会报错 2.子类继承父类时候必须实现 父类中的抽象方法。)

            virtual可以被子类重写,而abstract必须被子类重写。

             无法创建abstract类的实例 跟接口 静态类一样 。

 1  //抽象类
 2     public abstract class Animal
 3     {
 4         //定义虚方法
 5         public virtual void Eat()
 6         {
 7             Console.WriteLine("Animal eat");
 8         }
 9         //抽象方法
10         public abstract void Run();
11     }

 

 1  static void Main(string[] args)
 2         {
 3              
 4             Dog dog = new Dog();
 5             dog.Eat();
 6             dog.Run();
 7             Cat cat = new Cat();
 8             cat.Eat();
 9             cat.Run();
10             Console.ReadLine();
11 
12        
13           }
14 
15 //抽象类
16     public abstract class Animal
17     {
18         //定义虚方法
19         public virtual void Eat()
20         {
21             Console.WriteLine("Animal eat");
22         }
23         //抽象方法
24         public abstract void Run();
25     } 
26 
27     public class Dog : Animal
28     {
29         public override void Eat()
30         {
31             Console.WriteLine("我是Dog虚方法的多态 吃");
32         } 
33 
34         public override void Run()
35         {
36             Console.WriteLine("我是Dog抽象方法的多态 跑");
37         }
38     }
39 
40     public class Cat : Animal
41     {
42         public override void Eat()
43         {
44             Console.WriteLine("我是Cat虚方法的多态 吃");
45         }
46 
47         public override void Run()
48         {
49             Console.WriteLine("我是Cat抽象方法的多态 跑");
50         }
51     }

 

运行结果为:我是Dog虚方法的多态 吃 

      我是Dog抽象方法的多态 跑

      我是Cat虚方法的多态 吃

      我是Cat抽象方法的多态 跑

这就是多态。这就是面向对象,当然这其中还有很多东西,只是这个三个特性是最具代表性的也最重要的。

 

 

posted @ 2013-05-07 10:43  dragon.net  阅读(188)  评论(0编辑  收藏  举报