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. loj6087 毒瘤题

    传送门:https://loj.ac/problem/6087 [题解] 这垃圾题目卡空间啊... k=1相信大家都会,把所有数异或起来就是答案了. 考虑k=2,把所有数异或起来得到两个答案数的异或值 ...

  2. bzoj 1088 DP

    我们可以用w[i][s]来表示到第i位的方案,s代表第i位和第i+1位是否有雷的二进制串,那么我们就可以根据每一位的雷的数量转移了. /******************************** ...

  3. bzoj 2820 mobius反演

    学了一晚上mobius,终于A了一道了.... 假设枚举到i,质数枚举到p(程序里的prime[j]),要更新A=i*p的信息. 1. p|i    这时A的素数分解式中,p这一项的次数>=2. ...

  4. bzoj1053 搜索

    2013-11-16 17:43 原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1053 因为使pi(prime[i])<20亿的i不 ...

  5. 遍历文档内容,得到HTML层级结构

    嗯..没发现有写好的,那就自己写一个,刚好自己今天看了DOM操作的知识点,巩固一下. HTML可以表示为一个层次结构,生成的DOM Tree 就是类似与数据结构中的树一样,每个DOM节点都有它的chi ...

  6. (接口自动化)Python3操作MySQL数据库

    基础语法: import pymysql #导入模块 conn = pymysql.connect(host='localhost',user='root', passwd='123456', db= ...

  7. PL/SQL 02 声明变量 declare

    语法:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr] identifier:用于指定变量或常量的名称.CONSTANT:用于 ...

  8. Linux添加用户并赋予/取消管理员权限

    Ubuntu sudo adduser username # 添加用户 sudo adduser username sudo # 追加管理员权限 grep -Po '^sudo.+:\K.*$' /e ...

  9. [ Python - 7 ] 简单的省份查询系统

    主要是练习while 循环和 if 条件判断的使用 #!_*_coding:utf-8_*_ # Author: hkey def options(list): for i, v in enumera ...

  10. DELPHI数组,指针,字符串转换的例子

    关于数组,指针,字符串转换的例子 var   aa:   array [0..5] of Char;   bb:Pointer;   cc:string;   dd:PChar; procedure ...