转:https://blog.csdn.net/cplvfx/article/details/82982862

base其实最大的使用地方在面相对象开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法。

2.1关于base调用基类构造函数

    public class A
{
public A()
{
Console.WriteLine("Build A");
}
}
public class B : A
{
public B()
: base()
{
Console.WriteLine("Build B");
}
static void Main()
{
B b = new B();
Console.ReadLine();
}
}

运行结果:

Build A

Build B

2.2关于base在派生类中调用基类的方法。

    public class A
{
public virtual void Hello()
{
Console.WriteLine("Hello");
}
}
public class B : A
{
public override void Hello()
{
base.Hello();//调用基类的方法,显示Hello
Console.WriteLine("World");
}
}

运行结果:

Hello

World

下面是我自己改进了一下上面的例子:

    public class A
{
public virtual void Hello()
{
Console.WriteLine("Hello");
}
}
public class B : A
{
public static void Main ()
{
B b = new B();
b.Hello2();
b.Hello();
} public override void Hello()
{
base.Hello();//调用基类的方法,显示Hello
Console.WriteLine("World");
}
public void Hello2()
{
base.Hello();//调用基类的方法,显示Hello
}
}

运行结果:

Hello

Hello

World

关于Base:

base 关键字用于从派生类中访问基类的成员:
调用基类上已被其他方法重写的方法。
指定创建派生类实例时应调用的基类构造函数。
基类访问只能在构造函数、实例方法或实例属性访问器中进行。

1. 在派生类中调用基类方法。

public class BaseClass
{
protected string _className = "BaseClass";
public virtual void PrintName()
{
Console.WriteLine("Class Name: {0}", _className);
}
}
class DerivedClass : BaseClass
{
public string _className = "DerivedClass";
public override void PrintName()
{
Console.Write("The BaseClass Name is {0}", base._className);
//调用基类方法
base.PrintName();
Console.WriteLine("This DerivedClass is {0}", _className);
}
}
class TestApp
{
public static void Main()
{
DerivedClass dc = new DerivedClass();
dc.PrintName();
} }
}

运行结果:

The BaseClass Name is BaseClass

Class Name: BaseClass

This DerivedClass is DerivedClass

2.在派生类中调用基类构造函数

    public class BaseClass
{
int num;
public BaseClass()
{
Console.WriteLine("in BaseClass()");
}
public BaseClass(int i)
{
num = i;
Console.WriteLine("in BaseClass(int {0})", num);
}
}
public class DerivedClass : BaseClass
{
// 该构造器调用 BaseClass.BaseClass()
public DerivedClass()
: base()
{
}
// 该构造器调用 BaseClass.BaseClass(int i)
public DerivedClass(int i)
: base(i)
{
}
static void Main()
{
DerivedClass dc = new DerivedClass();
DerivedClass dc1 = new DerivedClass();
Console.ReadLine();
}
}

运行结果:

in BaseClass()
in BaseClass(int 1)

注意:
从静态方法中使用 base 关键字是错误的。
base 主要用于面向对象开发的对态这方面,在示例2中有体现。

-----------------------------------------------------------------------------我是一条帅气的分割线-------------------------------------------------------------帅气--------------------------------------------------------------------------------------------------------------的--------------------------------分------------割--------------线--------------------------

关于this

this 关键字引用类的当前实例。
以下是 this 的常用用途:
限定被相似的名称隐藏的成员
将对象作为参数传递到其他方法
声明索引器

    class Employee
{
private string _name;
private int _age;
private string[] _arr = new string[];
public Employee(string name, int age)
{
// 使用this限定字段,name与age
this._name = name;
this._age = age;
}
public string Name
{
get { return this._name; }
}
public int Age
{
get { return this._age; }
}
// 打印雇员资料
public void PrintEmployee()
{
// 将Employee对象作为参数传递到DoPrint方法
Print.DoPrint(this);
}
// 声明索引器
public string this[int param]
{
get { return _arr[param]; }
set { _arr[param] = value; }
}
}
class Print
{
public static void DoPrint(Employee e)
{
Console.WriteLine("Name: {0}\nAge: {1}", e.Name, e.Age);
}
}
class TestApp
{
static void Main()
{
Employee E = new Employee("Hunts", );
E[] = "Scott";
E[] = "Leigh";
E[] = "Kiwis";
E.PrintEmployee();
for (int i = ; i < ; i++)
{
Console.WriteLine("Friends Name: {0}", E[i]);
}
Console.ReadLine();
}
}

运行结果:

Name: Hunts
Age: 21

Friends Name: Scott

Friends Name: Leigh

Friends Name:

Friends Name:

Friends Name: Kiwis

最新文章

  1. TCP的三次握手(建立连接)和四次挥手(关闭连接)
  2. 动态令牌-(OTP,HOTP,TOTP)-基本原理
  3. UNITY5以后怎么改GUI文字
  4. 5+ App开发入门指南
  5. 解决Surface Pro外接移动硬盘经常睡眠的问题
  6. centos下安装mysql步骤
  7. android自定义动画
  8. 快速了解react
  9. javascript获取某个月份的天数
  10. 14. Encryption tools (加密工具 8个)
  11. HDU - 6357 Hills And Valleys(DP)
  12. ASP.NET Core使用Razor页面
  13. Android手机间无线互传功能探索及实现
  14. mysql生成不重复随机数(unique number generation)
  15. ubantu 单用户模式进入系统
  16. SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)
  17. 按顺序动态加载js, 可控版本, 有回调
  18. 在centos系统安装mongodb
  19. bzoj 2839 : 集合计数 容斥原理
  20. how to configure logback for Mybatis to print my SQL

热门文章

  1. 免费淘宝IP地址库简介及PHP/C#调用实例
  2. 洛谷P3377 【模板】左偏树(可并堆) 题解
  3. Flex AIR应用GPS定位功能(Android和IOS)
  4. Python--day25--面向对象之封装
  5. 1626 - Brackets sequence——[动态规划]
  6. 判断是否是ie浏览器或者edge浏览器,引入特定的css
  7. 2018-8-10-WPF-修改图片颜色
  8. 【49.23%】【hdu 1828】Picture
  9. sql临时表与变量表
  10. Python12_关于文件概念的讨论与序列化