码迷,mamicode.com
首页 > Windows程序 > 详细

Liam的C# 学习历程(三):类与对象、继承与多态

时间:2015-03-31 06:18:52      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

  在这一次的课程中,我们主要学习了C#中一些关于类的的具体应用和面向对象(OOP)的三大特点:封装(Encapsulation)、多态(Polymorphism)和继承(Inheritance)。接下来就让我们来实验一下学到的知识。

  (一)This 关键字

  this关键字(又称this指针)是类中所有非静态方法的隐藏指针。

  调用this的方法有很多种,首先是在收到与成员变量同名的参数时,使用this可以避免混淆,就像下面过程所演示的:

技术分享

  成员函数SomeMethod收到了一个与成员变量hour同名的参数,通过this.hour的方法,很好的解决了名字混淆的问题。

  还有一种用法是显式地调用一个类的方法和成员时可以用this指针,例如:

this.z = 5;    //给一个成员变量赋值

this.Draw(); //调用一个成员方法

 

(二)使用静态成员:

  静态成员不同于普通的成员变量,它是属于类本身而不是属于对象的一个变量,通常可以帮助我们来统计对象的数量。

技术分享

  从上图中我们可以看出,通过在构造函数中对count的值进行改变,我们可以达到对创造出的对象数量进行统计的目的。

 

(三)C#中参数的传递问题:

  C#中对自己创建的Class对象默认用按值传递的方法传递,即使在没有写val的情况下也会以按值传递的方法传递。

技术分享

  如上图,就像我们展示了C#中传递参数的方式。

  (四)关于new、virtual和override的一些问题:

  如果我们有下面这样的一些代码,其中包含new、virtual和override,你可以在不看输出结果的情况下猜想出它的正确结果么:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        class A
        {
            public virtual void Fruit()
            {
                Console.WriteLine("Apple");
            }
        }
        class B : A
        {
            public override void Fruit()
            {
                Console.WriteLine("Banana");
            }
        }
        class C : B
        {
            public new virtual void Fruit()
            {
                Console.WriteLine("Orange");
            }
        }

        class D : C
        {
            public override void Fruit()
            {
                Console.WriteLine("Pear");
            }
        }
        class TestMe
        {
            static void Main(string[] args)
            {
                A objA = new D();
                A objB = new B();
                C objC = new D();
                A objD = new A();
                objA.Fruit();
                objB.Fruit();
                objC.Fruit();
                objD.Fruit();
            }

        }
    }
}

  要是想要知道这些输出结果,很重要的一点就是要知道override会在任何情况下调用重写函数,无论是在子类型还是在父类型中。在理解了这个之后,我们就不难想出上面代码的输出结果了:

技术分享

  

Liam的C# 学习历程(三):类与对象、继承与多态

标签:

原文地址:http://www.cnblogs.com/tju-liuchang/p/4379644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!