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. POJ2154 Color

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10322   Accepted: 3360 Description Bead ...

  2. 微信小程序登录状态

    我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器):Restful服务通过客户端传过来唯一ID,来识别调用用户. >为什么需要维护登录态? 有自 ...

  3. spring自定义参数绑定(日期格式转换)

    spring参数绑定时可能出现 BindException(参数绑定异常),类似下面的日期绑定异常(前台传过来是String类型,实际的pojo是Date类型) default message [Fa ...

  4. 关于集合的size的操作

    1.创建集合: 创建指定大小的集合:(大小为5) db.createCollection(}) 2.插入五条数据: > db.colle1.insert({name:}) WriteResult ...

  5. TensorFlow 官方文档中文版【转】

    转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/ TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远 ...

  6. react native windows 搭建(完整版)

    声明:用windows 搭建的react native只能开发安卓应用 1.准备安装java jdk,以及Android SDK 传送门: java   JDK   Android SDK(自行寻找) ...

  7. 【 HAProxy 】学习笔记

    一.haproxy的功能: HAProxy vs LVS        HAProxy支持tcp和http两种代理模式,而lvs仅支持tcp代理模式        HAProxy相比LVS的使用要简单 ...

  8. AC日记——[FJOI2007]轮状病毒 bzoj 1002

    1002 思路: 打表找规律: dp[i]=dp[i-1]*3-dp[i-2]+2; 套个高精就a了: 代码: #include <cstdio> #include <cstring ...

  9. Jquery学习之路(三) 实现弹出层插件

    弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 ...

  10. Carthage 不知不觉用到了

    Carthage 是什么? 这个问题我们简单点一句话总结: 你知道什么事CocoaPods吧,我相信只要是做iOS的都知道,Carthage 的属性和作用和我们常用的CocoaPods都是一样的,这样 ...