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