C#中base关键字的几种用法:base()

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


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

  1.  
    public class A
  2.  
    {
  3.  
    public A()
  4.  
    {
  5.  
    Console.WriteLine("Build A");
  6.  
    }
  7.  
    }
  8.  
    public class B:A
  9.  
    {
  10.  
    public B():base()
  11.  
    {
  12.  
    Console.WriteLine("Build B");
  13.  
    }
  14.  
    static void Main()
  15.  
    {
  16.  
    B b = new B();
  17.  
    Console.ReadLine();
  18.  
    }
  19.  
    }

创建一个B的实例对象,获得结果是同时打印Build A和Build B.

 

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

  1.  
    public class A
  2.  
    {
  3.  
    public virtual void Hello()
  4.  
    {
  5.  
    Console.WiriteLine("Hello");
  6.  
    }
  7.  
    }
  8.  
    public class B : A
  9.  
    {
  10.  
    public override void Hello()
  11.  
    {
  12.  
    base.Hello();//调用基类的方法,显示Hello
  13.  
    Console.WiriteLine("World");
  14.  
    }
  15.  
    }

这样如果程序调用B.Hello()获得的效果将会使Hello World.


最后补充下,根据MSDN Library介绍来看这两个关键字都是属于[访问关键字]类型

 

+++++++++++++++++++++++++++++ 无敌分割线 +++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++ 文章二 +++++++++++++++++++++++++++++

 

关于base

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


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

  1.  
    using System;
  2.  
    public class BaseClass
  3.  
    {
  4.  
    protected string _className = "BaseClass";
  5.  
    public virtual void PrintName()
  6.  
    {
  7.  
    Console.WriteLine("Class Name: {0}", _className);
  8.  
    }
  9.  
    }
  10.  
    class DerivedClass : BaseClass
  11.  
    {
  12.  
    public string _className = "DerivedClass";
  13.  
    public override void PrintName()
  14.  
    {
  15.  
    Console.Write("The BaseClass Name is {0}");
  16.  
    //调用基类方法
  17.  
    base.PrintName();
  18.  
    Console.WriteLine("This DerivedClass is {0}", _className);
  19.  
    }
  20.  
    }
  21.  
    class TestApp
  22.  
    {
  23.  
    public static void Main()
  24.  
    {
  25.  
    DerivedClass dc = new DerivedClass();
  26.  
    dc.PrintName();
  27.  
    }
  28.  
    }

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

  1.  
    // keywords_base2.cs
  2.  
    using System;
  3.  
    public class BaseClass
  4.  
    {
  5.  
    int num;
  6.  
    public BaseClass()
  7.  
    {
  8.  
    Console.WriteLine("in BaseClass()");
  9.  
    }
  10.  
    public BaseClass(int i)
  11.  
    {
  12.  
    num = i;
  13.  
    Console.WriteLine("in BaseClass(int {0})", num);
  14.  
    }
  15.  
    }
  16.  
    public class DerivedClass : BaseClass
  17.  
    {
  18.  
    // 该构造器调用 BaseClass.BaseClass()
  19.  
    public DerivedClass()
  20.  
    : base()
  21.  
    {
  22.  
    }
  23.  
    // 该构造器调用 BaseClass.BaseClass(int i)
  24.  
    public DerivedClass(int i)
  25.  
    : base(i)
  26.  
    {
  27.  
    }
  28.  
    static void Main()
  29.  
    {
  30.  
    DerivedClass dc = new DerivedClass();
  31.  
    DerivedClass dc1 = new DerivedClass(1)();
  32.  
    Console.ReadLine();
  33.  
    }
  34.  
    }

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

 

关于this

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


示例:

  1.  
    // this 关键字
  2.  
    // keywords_this.cs
  3.  
    using System;
  4.  
    class Employee
  5.  
    {
  6.  
    private string _name;
  7.  
    private int _age;
  8.  
    private string[] _arr = new string[5];
  9.  
    public Employee(string name, int age)
  10.  
    {
  11.  
    // 使用this限定字段,name与age
  12.  
    this._name = name;
  13.  
    this._age = age;
  14.  
    }
  15.  
    public string Name
  16.  
    {
  17.  
    get { return this._name; }
  18.  
    }
  19.  
    public int Age
  20.  
    {
  21.  
    get { return this._age; }
  22.  
    }
  23.  
    // 打印雇员资料
  24.  
    public void PrintEmployee()
  25.  
    {
  26.  
    // 将Employee对象作为参数传递到DoPrint方法
  27.  
    Print.DoPrint(this);
  28.  
    }
  29.  
    // 声明索引器
  30.  
    public string this[int param]
  31.  
    {
  32.  
    get { return _arr[param]; }
  33.  
    set { _arr[param] = value; }
  34.  
    }
  35.  
    }
  36.  
    class Print
  37.  
    {
  38.  
    public static void DoPrint(Employee e)
  39.  
    {
  40.  
    Console.WriteLine("Name: {0}\nAge: {1}", e.Name, e.Age);
  41.  
    }
  42.  
    }
  43.  
    class TestApp
  44.  
    {
  45.  
    static void Main()
  46.  
    {
  47.  
    Employee E = new Employee("Hunts", 21);
  48.  
    E[0] = "Scott";
  49.  
    E[1] = "Leigh";
  50.  
    E[4] = "Kiwis";
  51.  
    E.PrintEmployee();
  52.  
    for (int i = 0; i < 5; i++)
  53.  
    {
  54.  
    Console.WriteLine("Friends Name: {0}", E[i]);
  55.  
    }
  56.  
    Console.ReadLine();
  57.  
    }
  58.  
    }

 

转:https://www.cnblogs.com/eedc/p/6343201.html

 

posted @ 2021-05-30 23:01  rossi努力努力  阅读(736)  评论(0编辑  收藏  举报