C#基础之 派生类
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#基础之 派生类的更多相关文章
- C++基础知识-派生类、调用顺序、访问等级、函数遮蔽
一.派生类的概念 类之间有一种层次关系,有父亲类,有孩子类. 车这个类,当成父类(也叫基类.超类),派生出卡车.轿车,他们属于孩子类(子类.派生类) 继承:有父亲类,有孩子类,构成了层次关系.继承这种 ...
- C++基础之继承类和派生类
(1)继承是创建一个具有某个类的属性和行为的新类的能力.原有的类称为基类,新创建的类称为派生类.派生类将基类中的所有成员作为自己的成员,同时派生类本身可以定义新的成员(2)派生类只有一个基类的继承称单 ...
- c++基础(二):成员he派生类
struct Date{ int day, month, year; }; struct Book{ string name; Date date; void init(string n, int y ...
- 基础学习:关于this在派生类构造函数中的理解
https://www.cnblogs.com/Bear-Study-Hard/archive/2006/01/09/313551.html 看了上面这篇文章有感,特做了个小样板,以加深对于this在 ...
- .NET面试题系列[11] - IEnumerable<T>的派生类
“你每次都选择合适的数据结构了吗?” - Jeffery Zhao .NET面试题系列目录 ICollection<T>继承IEnumerable<T>.在其基础上,增加了Ad ...
- .NET面试题系列[10] - IEnumerable的派生类
.NET面试题系列目录 IEnumerable分为两个版本:泛型的和非泛型的.IEnumerable只有一个方法GetEnumerator.如果你只需要数据而不打算修改它,不打算为集合插入或删除任何成 ...
- python基础——使用元类
python基础——使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello. ...
- 【IOS学习基础】OC类的相关
几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...
- 派生类地址比基类地址少4(子类与基类指针强行转换的时候,值居然会发生变化,不知道Delphi BCB是不是也这样) good
大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸.我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree ...
随机推荐
- POJ2154 Color
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10322 Accepted: 3360 Description Bead ...
- 微信小程序登录状态
我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器):Restful服务通过客户端传过来唯一ID,来识别调用用户. >为什么需要维护登录态? 有自 ...
- spring自定义参数绑定(日期格式转换)
spring参数绑定时可能出现 BindException(参数绑定异常),类似下面的日期绑定异常(前台传过来是String类型,实际的pojo是Date类型) default message [Fa ...
- 关于集合的size的操作
1.创建集合: 创建指定大小的集合:(大小为5) db.createCollection(}) 2.插入五条数据: > db.colle1.insert({name:}) WriteResult ...
- TensorFlow 官方文档中文版【转】
转自:http://wiki.jikexueyuan.com/project/tensorflow-zh/ TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远 ...
- react native windows 搭建(完整版)
声明:用windows 搭建的react native只能开发安卓应用 1.准备安装java jdk,以及Android SDK 传送门: java JDK Android SDK(自行寻找) ...
- 【 HAProxy 】学习笔记
一.haproxy的功能: HAProxy vs LVS HAProxy支持tcp和http两种代理模式,而lvs仅支持tcp代理模式 HAProxy相比LVS的使用要简单 ...
- AC日记——[FJOI2007]轮状病毒 bzoj 1002
1002 思路: 打表找规律: dp[i]=dp[i-1]*3-dp[i-2]+2; 套个高精就a了: 代码: #include <cstdio> #include <cstring ...
- Jquery学习之路(三) 实现弹出层插件
弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 ...
- Carthage 不知不觉用到了
Carthage 是什么? 这个问题我们简单点一句话总结: 你知道什么事CocoaPods吧,我相信只要是做iOS的都知道,Carthage 的属性和作用和我们常用的CocoaPods都是一样的,这样 ...