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());
}
}
}
(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());
}
}
}
相关文章推荐
- C#基础知识系列七(base、this、new、override、abstract、virtual、static)
- C#基础知识系列七(base、this、new、override、abstract、virtual、static)
- NOR FLASH && NAND FLASH 基本知识 比较
- sql 语句的基本知识,比较杂。
- c#语法糖代码——继承中构造函数的问题,this&base比较
- C#基础知识(base、this、new、override、abstract、virtual、static)
- NOR FLASH && NAND FLASH 基本知识 比较
- Unity3D基本知识 构造函数 this用法
- js基本知识比较系列四:表单和表格
- js基本知识比较系列一:获取元素
- js基本知识比较系列三:事件
- js基本知识比较系列四:动画
- 数据库的基本知识之基本select语句、比较运算和多表查询
- 基本Zone-base firewall知识及配置
- C#基础知识系列七(base、this、new、override、abstract、virtual、static)
- js基本知识比较系列二:DOM操作
- C#关键字this和base比较
- 广告基本知识-搜索,广告与推荐的比较
- ajax的基本知识整理
- python3-基本知识和注意点