base基本知识和this的比较

一、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());
     }
    }
       
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值