标签:
在这一次的课程中,我们主要学习了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会在任何情况下调用重写函数,无论是在子类型还是在父类型中。在理解了这个之后,我们就不难想出上面代码的输出结果了:
标签:
原文地址:http://www.cnblogs.com/tju-liuchang/p/4379644.html