base关键字用法
-
this是标识当前资源对象的,而base是基于父级的。
-
base发挥了期灵魂级的作用——多态
-
base子类可以访问父类成员
-
base调用父类方法必须重写父类方法
-
base子类构造函数直接访问:base父类构造方法
-
base同样不能用于静态方法
————————————————————————————————————————————————————————————
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 人类
{
class person
{
private int age;
private string name;
private static int num;
public person(int a,string n)
{
age = a;
name = n;
num++;
}
public void sleep()
{
Console.WriteLine("说梦话中。。。我叫:{0},年龄{1}",name,age);
Console.WriteLine("你是第{0}个说梦话的人", num);
}
}
class baby : person
{
public baby(int a, string n):base(a,n)
{
}
public void cry()
{
Console.WriteLine("im cry");
}
}
}
class Program
{
static void Main(string[] args)
{
//person p1 = new person(12, "李明");
//p1.sleep();
//Console.ReadKey();
//person p2 = new person(20, "小红");
//p2.sleep();
//Console.ReadKey();
baby b = new baby(12,"小红");
b.cry();
b.sleep();
Console.ReadKey();
}
}
}
————————————————————————————————————————————————————————————
person类是通过构造函数向程序内传递参数的,baby类继承于person;通过baby的构造函数public baby(int a, string n):base(a,n)
向基类的构
在派生类中调用基类方法
using System;
namespace 重写
{
public class A
{
protected string src = "中原工学院";
public virtual void output()
{
Console.WriteLine("输出src: {0}", src);
}
}
class B:A
{
public new string src = "A";
public override void output()
{
Console.Write("输出x");
//调用基类方法
base.output();
Console.WriteLine("This A is {0}", src);
}
}
class TestApp
{
public static void Main()
{
A a = new B();
a.output();
Console.ReadKey();
}
}
}
运行结果
输出x输出src: 中原工学院
This A is A
2. 在派生类中调用基类构造函数
using System;
namespace 重写
{
public class MyBaseClass
{
public MyBaseClass(int i)
{
Console.WriteLine("我是基类带一个参数的构造函数");
}
}
public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass() : base(1)
{
Console.WriteLine("我是子类无参构造函数");
}
public MyDerivedClass(int i) : base(i)
{
Console.WriteLine("我是子类带一个参数的构造函数");
}
public MyDerivedClass(int i, int j) : base(i)
{
Console.WriteLine("我是子类带二个参数的构造函数");
}
}
class Test
{
public static void Main()
{
MyBaseClass a = new MyDerivedClass(100);
a.ToString();
Console.ReadKey();
}
}
}
运行结果
我是基类带一个参数的构造函数
我是子类带一个参数的构造函数