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 ...
随机推荐
- 【HDU3853】LOOPS [期望DP]
LOOPS Time Limit: 5 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description Akemi Homura is a ...
- openstack中region、az、host aggregate、cell 概念
1. region 更像是一个地理上的概念,每个region有自己独立的endpoint,regions之间完全隔离,但是多个regions之间共享同一个keystone和dashboard.(注:目 ...
- 2017年上海金马五校程序设计竞赛:Problem B : Sailing (广搜)
Description Handoku is sailing on a lake at the North Pole. The lake can be considered as a two-dime ...
- CVE-2017-5521: Bypassing Authentication on NETGEAR Routers(Netgear认证绕过漏洞)
SpiderLabs昨天发布的漏洞, 用户访问路由器的web控制界面尝试身份验证,然后又取消身份验证,用户就会被重定向到一个页面暴露密码恢复的token.然后通过passwordrecovered.c ...
- 一致性hash与CRUSH算法总结
相同之处:都解决了数据缓存系统中数据如何存储与路由. 不同之处:区别在于虚拟节点和物理节点的映射办法不同 由于一般的哈希函数返回一个int(32bit)型的hashCode.因此,可以将该哈希函数能够 ...
- React 踩坑记录
1.React-router error: super expression must either be null or a function 原因:引入babel后写ES6风格的代码: class ...
- Oracle基础 12 对象 objects 同义词/序列/试图/索引
--创建同义词create public synonym employees for hr.employees; --公共同义词需要 create public synonym 权限 表的所有用户授 ...
- 怎样用css来美化一个html页面
# 转载请留言联系 我们都知道html写出来的东西是一个文本内容,很单调.和我们平时刷网页看到的内容不一样.那普通的网页是怎样对html超文本进行装饰的呢?没错,就是CSS. css的基本语法 选择器 ...
- 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)
本篇文章是使用python抓取数据的第一篇,使用requests+BeautifulSoup的方法对页面进行抓取和数据提取.通过使用requests库对链家网二手房列表页进行抓取,通过Beautifu ...
- docker1.13新功能上要关注的点
如果要作单点端口映射,则需要结合constraint和label来定位具体的proxy机器吧. 如果不用这种模式,,ingress确实又太浪费集群端口了.. 纠结,,看看如何和compose v3作很 ...