时间:2021-05-20
它与this关键字一样,都是作为类的实例(因此不能调用基类的静态成员和抽象成员)简写或者替代而存在的,只不过this关键字用于替代本类的实例,base关键字用于替代基类的实例,用法很简单,其访问基类的形式如下:
base.【标识符】
base[【表达式列表】] 这个类型的一看便可以大概猜测多用于基类实例的索引器操作,在我下面演示的代码中你会看到它的用法。
对于 base.【标识符】的访问形式再次说明一下:
对于非虚方法,这种访问仅仅是对基类实例成员的直接访问,完全等价于((base)this).【标识符】。
对于虚方法,对于这种访子类重写该虚方法运用这种访问形式也是(禁用了虚方法调用的机制)对基类实例成员的直接访问,将其看做非虚方法处理,此时则不等价于((base)this).【标识符】,因为这种格式完全遵守虚方法调用的机制,其声明试时为积累类型,运行时为子类类型,所以执行的还是子类的重写方法。于未重写的虚方法等同于简单的非虚方法处理。
测试代码如下:
using System;namespace BaseTest{ class father { string str1 = "this field[1] of baseclass", str2 = "this field[2] of baseclass"; public void F1() //Non-virtual method { Console.WriteLine(" F1 of the baseclass"); } public virtual void F2()//virtual method { Console.WriteLine(" F2 of the baseclass"); } public virtual void F3() { Console.WriteLine(" F3 of the baseclass that is not overrided "); } public string this[int index] { set { if (index==1 ) { str1 = value; } else { str2 = value; } } get { if (index ==1) { return str1; } else { return str2; } } } } class Child:father { public void G() { Console.WriteLine("======Non-virtual methods Test ========="); base.F1(); ((father)this).F1(); Console.WriteLine("======virtual methods Test========="); base.F2(); ((father)this).F2(); base.F3(); ((father)this).F3(); Console.WriteLine("=====Test the type that the tbase [[expression]] =========="); Console.WriteLine(base[1]); base[1] = "override the default "; Console.WriteLine(base[1]); Console.WriteLine("================Test Over====================="); } public override void F2() { Console.WriteLine(" F2 of the subclass "); } static void Main(string[] args) { Child child=new Child(); child.G(); Console.ReadKey(); } }}
base用于构造函数声明,用法和this用于构造函数声明完全一致,但base是对基类构造函数形参的匹配。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C#编程语法中break,continue,return这三个常用的关键字的学习对于我们编程开发是十分有用的,那么本文就向你介绍break,continue
在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是
个人认为,提供params关键字以实现方法形参个数可变是C#语法的一大优点。在方法形参列表中,数组类型的参数前加params关键字,通常可以在调用方法时代码更加
classclass关键字声明类类型或定义类类型的对象。语法[template-spec]class[ms-decl-spec][tag[:base-list]
前言用过c#的可能对yield关键字爱不释手,那么在像我这种被迫上java贼船的人,就想找到类似的功能。关于c#中的yield关键字大家可以参考这篇文章:我使用