您的位置:首页 > 其它

base基本知识和this的比较

2014-04-01 17:49 190 查看
一、base的用法

(1)base用于从派生类中访问基类的成员;

调用基类上已被其他方法重写的方法,指定创建派生类时调用的基类构造函数。

(2)基类访问只能在构造函数,实例方法或实力属性访问器中进行;

(3)从静态方法中使用Base关键字是错误的;

二、base和this的区别

base是子类中引用父类,this是当前类引用自己。

(1)尽量少用或者不用base和this。除了避开子类的名称冲突和在一个构造函数中调用其他构造函数之外,base和this的使用容易引起不必要的结果。

(2)在静态成员中使用base和this都是不允许的,原因是base和this访问的都是类的实例,也就是对象,而静态只能由类来访问,不能由对象来访问。

(3)base是为了实现多态而设计的。

(4)使用this或base只能指定一个构造函数,也就是说不能将base和this作用在一个构造函数上。

(5)简单来说,base用于在派生类中访问重写的基类成员;而this用来访问本类的成员,当然也包括继承而来的公有和保护成员。

(6)除了base,访问基类成员的另一种方式是:显示的类型转换来实现。只是该方法不能为静态方法。

代码出处:
http://msdn.microsoft.com/zh-cn/library/9fkccyh4.aspx
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace StudyVirtual

{

class Program

{

public class Shape

{

public const double PI = Math.PI;

protected double x, y;

public Shape()

{

}

public Shape(double x, double y)

{

this.x = x;

this.y = y;

}

public virtual double Area()

{

return x * y;

}

}

public class Circle : Shape

{

//通知继承的类 Circle、 Sphere和 Cylinder 初始化基类的所有使用构造函数,如以下声明所示。

//public Cylinder(double r, double h): base(r, h) {}

public Circle(double r) : base(r, 0)

{

}

public override double Area()

{

return PI * x * x;

}

}

class Sphere : Shape

{

public Sphere(double r) : base(r, 0)

{

}

public override double Area()

{

return 4 * PI * x * x;

}

}

class Cylinder : Shape

{

public Cylinder(double r, double h) : base(r, h)

{

}

public override double Area()

{

return 2 * PI * x * x + 2 * PI * x * y;

}

}

static void Main()

{

double r = 3.0, h = 5.0;

Shape c = new Circle(r);

Shape s = new Sphere(r);

Shape l = new Cylinder(r, h);

// Display results:

Console.WriteLine("Area of Circle = {0:F2}", c.Area());

Console.WriteLine("Area of Sphere = {0:F2}", s.Area());

Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: