1: 当创建派生类的实例时,会自动调用基类的默认构造函数

 namespace parentTest
{
public class Reader
{
public Reader()
{
Console.WriteLine("基类的构造函数被调用");
} }
public class Student:Reader
{
public Student()
{
Console.WriteLine("派生类的构造函数被调用");
}
} class Program
{
static void Main(string[] args)
{
Student stu = new Student(); //结果将先 调用 基类的构造函数,在调用 派生类的构造函数
}
}
}

结果:

2:

       public Student()   //这种方法属于基类默认构造函数的隐式调用
{
//方法体
}
public Student() //这种方法属于基类默认构造函数的 显示调用
: base()
{
//方法体
}

3: 显示调用  基类的其他构造函数

 namespace parentTest
{
public class Reader
{
public string ReaderID { get; set; }
public string ReaderName { get; set; } public Reader(string readerid, string readername)
{
this.ReaderID = readerid;
this.ReaderName = readername;
Console.WriteLine("基类的带参构造函数被调用");
}
} public class Student:Reader
{
public string ClassRoom{get;set;} public Student(string readerid, string readername, string classroom)
: base(readerid, readername) //注意此处 {
this.ClassRoom = classroom;
Console.WriteLine("派生类的带参数构造函数被调用了");
Display();
}
public void Display()
{
Console.WriteLine("读者证号:" + ReaderID); //其中 ReaderID 和 ReaderName 的值由 base(readerid, readername) 中继承
Console.WriteLine("读者姓名:" + ReaderName);
Console.WriteLine("读者班级:" + ClassRoom);
}
} class Program
{
static void Main(string[] args)
{
Student stu = new Student("s123", "tang", "a1"); //结果将先 调用 基类的构造函数,在调用 派生类的构造函数 }
}
}

结果:

4:隐藏基类的成员

 namespace parentTest
{
public class BaseClass
{
public string name = "Tang";
public void Method()
{
Console.WriteLine("调用的是基类的方法");
}
} public class DerivedClass : BaseClass
{
//若想在派生类中 重新命名 name 的值,使用下面方式
public new string name = "newTang"; //关键字 new public new void Method() //此处隐藏了基类的 Method() 方法
{
Console.WriteLine("调用的是派生类的方法");
} } class Program
{
static void Main(string[] args)
{
//调用基类的方法
BaseClass bc = new BaseClass();
Console.WriteLine(bc.name);
bc.Method(); //调用派生类的方法
DerivedClass dc = new DerivedClass();
Console.WriteLine(dc.name);
dc.Method();
}
} }

结果:

5: 重写基类的方法

将基类中的某个方法声明为 virtual,则该方法称为虚方法,基类中的虚方法能在派生类中被重写(使用override)

 namespace parentTest
{
public class BaseClass
{
public virtual void Method() //注意 因为要在派生类中重写,所以修饰符不能使用 private
{
Console.WriteLine("调用的是基类的方法");
}
} public class DerivedClass : BaseClass
{
//在派生类中重写基类的方法
public override void Method()
{
Console.WriteLine("调用派生类方法");
}
} class Program
{
static void Main(string[] args)
{
DerivedClass dc = new DerivedClass();
dc.Method();
}
}
}

结果:

C#基础之 派生类的更多相关文章

  1. C++基础知识-派生类、调用顺序、访问等级、函数遮蔽

    一.派生类的概念 类之间有一种层次关系,有父亲类,有孩子类. 车这个类,当成父类(也叫基类.超类),派生出卡车.轿车,他们属于孩子类(子类.派生类) 继承:有父亲类,有孩子类,构成了层次关系.继承这种 ...

  2. C++基础之继承类和派生类

    (1)继承是创建一个具有某个类的属性和行为的新类的能力.原有的类称为基类,新创建的类称为派生类.派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员(2)派生类只有一个基类的继承称单 ...

  3. c++基础(二):成员he派生类

    struct Date{ int day, month, year; }; struct Book{ string name; Date date; void init(string n, int y ...

  4. 基础学习:关于this在派生类构造函数中的理解

    https://www.cnblogs.com/Bear-Study-Hard/archive/2006/01/09/313551.html 看了上面这篇文章有感,特做了个小样板,以加深对于this在 ...

  5. .NET面试题系列[11] - IEnumerable<T>的派生类

    “你每次都选择合适的数据结构了吗?” - Jeffery Zhao .NET面试题系列目录 ICollection<T>继承IEnumerable<T>.在其基础上,增加了Ad ...

  6. .NET面试题系列[10] - IEnumerable的派生类

    .NET面试题系列目录 IEnumerable分为两个版本:泛型的和非泛型的.IEnumerable只有一个方法GetEnumerator.如果你只需要数据而不打算修改它,不打算为集合插入或删除任何成 ...

  7. python基础——使用元类

    python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...

  8. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  9. 派生类地址比基类地址少4(子类与基类指针强行转换的时候,值居然会发生变化,不知道Delphi BCB是不是也这样) good

    大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸.我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree ...

随机推荐

  1. 【poj3420】递推式转矩阵乘法

    历史性的时刻!!! 推了一晚上!和hyc一起萌萌哒地推出来了!! 被摧残蹂躏的智商啊!!! 然而炒鸡高兴!! (请不要介意蒟蒻的内心独白..) 设a[i]为扫到第i行时的方案数. 易知,对于一行1*4 ...

  2. bzoj 1878 SDOI2009树状数组 离线操作

    本来想写2120的,结果想起来了这个 我们先对于询问左端点排序,用树状数组存区间字母个数,对于每种字母, 第一次出现的位置记录为1,剩下的记录为0,然后记录下,每种颜色 后面第一个和他相同颜色的位置 ...

  3. python基础===python3 get和post请求(转载)

    get请求 #encoding:UTF-8 importurllib importurllib.request data={} data['name']='aaa' url_parame=urllib ...

  4. Oracle rman 全备份的一个小例子

    run{  allocate channel d1 type disk;  backup database format='/u01/backup/%T_%d_%s.bak';  sql 'alter ...

  5. WEB字体,多列布局和伸缩盒

    WEB字体 语法 @font-face{ font-family:""; src:url() format() ... } 兼容性写法 @font-face { font-fami ...

  6. 【 Linux】脚本导入格式

    在从windows文本(*.txt)格式导入到Linux中时,需要注意. 如果是直接将*.txt 导入到Linux系统,然后重命名使用会有问题,建议在linux系统中创建文件,然后直接复制内容到lin ...

  7. 《Java编程思想》笔记 第十八章 Java I/O 系统

    1 File 类 File是一个  文件和目录路径名  的抽象表示,通过File可以查看文件的各种信息,也可以增加删除文件. File构造器接受一个路径字符串并把它与实际文件目录映射起来,也能接受父子 ...

  8. Tkinter 计算器

    from tkinter import * master = Tk() frame = Frame(master) frame.pack(padx=10,pady=10) v1 = StringVar ...

  9. HDU-5451

    Best Solver Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Tota ...

  10. js中的数组(类)的相加

    var wcf=[1,2,3,4,5] console.log(wcf[4]) var wcf1=[7,8,9,10,11] var wcf2=wcf+wcf1 console.log(wcf2) c ...