C# 参考之访问关键字:base、this

base

base 关键字用于从派生类中访问基类的成员:

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

示例:

在派生类中调用基类方法。 
// base 关键字
// 访问基类成员
using System;

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.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
This DerivedClass is DerivedClass
*/
在派生类中调用基类构造函数。 
// keywords_base2.cs
using System;
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(1);
    }
}

/**//*
控制台输出:
in BaseClass()
in BaseClass(1)
*/

注意点

从静态方法中使用 base 关键字是错误的。 
base 主要用于面向对象开发的对态这方面,在示例2中有体现。 
this
this 关键字引用类的当前实例。

以下是 this 的常用用途:

限定被相似的名称隐藏的成员 
将对象作为参数传递到其他方法 
声明索引器 
示例:

综合示例。 
// this 关键字
// keywords_this.cs
using System;
class Employee
{
    private string _name;
    private int _age;
    private string[] _arr = new string[5];

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", 21);
        E[0] = "Scott";
        E[1] = "Leigh";
        E[4] = "Kiwis";
        E.PrintEmployee();

for(int i=0; i<5; 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
*/

(0)

相关推荐

  • C#使用this关键字实现串联构造函数调用方法

    本文实例讲述了C#使用this关键字实现串联构造函数调用方法.分享给大家供大家参考.具体分析如下: 在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,显然不符合oop编程思想,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法,下面就通过this关键字来实现串联构造函数做一简单示例. 示例代码如下: 复制代码 代码如下: public class Person {       

  • C#中this用法系列(二) 通过this修饰符为原始类型扩展方法

    定义一个静态类,类中定义静态方法,方法中参数类型前边加上this修饰符,即可实现对参数类型的方法扩展 示例如 namespace Demo{ // 这里的类必须为静态类 public static class Json { // 方法为静态方法 // this修饰符后边是string类型,即为string类型扩展出了ToJson方法 public static object ToJson(this string Json) { return Json == null ? null : JsonC

  • C#基础知识之this关键字介绍

    一.this可以代表引用类的当前实例,包括继承而来的方法,通常可以省略. 复制代码 代码如下: public class Person {     public string Name { get; set; }     public int Age { get; set; }     public Person(string Name, int Age)     {         this.Age = Age;         this.Name = Name;     } } 这个不用多说

  • c#访问this关键字和base关键字示例

    指定创建派生类实例时应调用的基类构造函数: 调用基类上已被其他方法重写的方法. 注意:不能从静态方法中使用base关键字,base关键字只能在实例构造函数.实例方法或实例访问器中使用. 例:访问关键字this和base关键字示例:创建基类Person,包含两个数组成员name和age.一个具有两个参数的构造函数.一个虚函数GetInfo()以显示数据成员name和age的内容:创建派生类Student,包含一个数据成员studentId,一个具有三个参数的派生类构造函数,并用:base调用基类构

  • C# this关键字的四种用法

    本文实例为大家分享了C# this关键字的四种用法,供大家参考,具体内容如下 用法一  this代表当前实例,用this.显式调用一个类的方法和成员 namespace Demo { public class Test { private string scope = "全局变量"; public string getResult() { string scope = "局部变量"; // 在这里,this代表Test的实例,所以this.scope指向的是全局变量

  • c#多线程中Lock()关键字的用法小结

    本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待. 每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数.这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生. 其中,lock是一种比较好用的简单的线程同步方式,它是通过为给定对象获取互斥锁来实现同步的.它可以保证当一个线程在关键

  • C#中this的使用实例分析

    this关键字在C#程序设计中的应用非常频繁,今天本文就this关键字的用法做一番分析,希望能提对大家的C#程序设计有一定的帮助作用.具体分析如下: 1.代表当前类,在当前类中可使用this访问当前类成员变量和方法(需要注意的是 静态方法中不能使用this),也可用于参数传递,传递当前对象的引用. 示例代码如下: class Program { static void Main(string[] args) { thisClass testObj = new thisClass(); Conso

  • C#中this的用法集锦

    this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符.下面就针对this的四种用法,做简单的总结. 首先,我们分别创建User和VIP两个C#类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AppConsole { /// <summary> /// 普通用户 /// &

  • C# dynamic关键字的使用方法

    C#是一种类型安全的编程语言(所有表达式都能解析成某个类型的实例,在编译器生成的代码中,只会执行对这个类型有效的操作),和非类型安全的语言相比,类型安全的优势就体现出来了:1.许多错误能在编译时检测到,取保代码在执行它之前是正确的.2.编译时语言通常能生成更小,更快的代码.(在编译时进行更多的假设,并在IL和元数据中落实那些假设) 为了方便开发人员使用反射或者与基本组件通信,dynamic诞生了!一下代码展示了如何利用反射在一个String目标("根据我找类型")上调用一个方法(&qu

  • C#中this指针的用法示例

    本文实例展示了C#中this指针的用法,对于初学者进一步牢固掌握C#有很大帮助,具体内容如下: 一.this指针是什么: 这里有一些面向对象编程的概念需要说明:类(Class)的概念和对象(Object)的概念 类是对事物概括,也是C#编码时所有代码归属的基本单位:而对象是对类的实例化,也就是C#里new方法的返回值.写代码是不能直接用操作类,而只能先实例化类,然后我们用这个类被实例化后的对象. 通俗一些的说明是,"类"好比是"人"的概念,而我们把类实例化后,就成为

随机推荐