VS派生类

  • 继承。派生类
class AClass : FClass
构建函数继承 public classname (string astring): base(astring){};默认不继承基类的构建函数。基类的在前面执行,然后执行派生类构建函数中的代码。
  • 多态性
即看对象变量引用的是哪个类的实例,优先用对应类的方法,如果没有,到基类找。
一说同名操作,有多种,包含重载、重写、隐藏方法等
重写即派生类重写基类方法
基类定义允许重写
public virtual viod methodname(){}
派生类重写
public override viod methodname(){}
方法名必须相同;参数列表必须相同;相同的返回值;存取权限相同
  • 隐藏基类成员
用于版本,用new定义
隐藏域
    基类 public string astring;
    派生类public new string astring;
隐藏方法
参数必须相同。
    基类public classname(string:astring);
    派生类public new classsname(string:astring);
 
(1)隐藏方法不但可以隐藏基类中的虚方法,而且也可以隐藏基类中的非虚方法。
(2)隐藏方法中父类的实例调用父类的方法,子类的实例调用子类的方法。
 (3)和上一条对比:重写方法中子类的变量调用子类重写的方法,父类的变量要看这个父类引用的是子类的实例还是本身的实例,如果引用的是父类的实例那么调用基类的方法,如果引用的是派生类的实例则调用派生类的方法。
  • 区别隐藏和重写
“重写”:允许使用现有成员的一个新实现代替基础类实现。换句话说就是允许使用自己的实现代替相
                        同名称的一个基类成员。
“隐藏”:可以模糊一个基类的成员并用一个完全不同的新实现代替它。
“重写”:在基类中要被重写的方法要修饰为virtual,在子类中该方法要被修饰为overrride。
                  新实现的方法必须与要被重写的方法有相同的函数名,函数签名,返回类型以及
                  访问级别。(简单来说就是除了virtual/override,其他函数声明完全一致)
“隐藏”:子类中的方法要被修饰为new
                  子类中的方法与要被隐藏的方法有相同的函数签名并且是相同种类的成
                  员,但是它可以拥有不同的访问级别,返回类型以及函数实现 。
 “重载”:一个重载的方法必须拥有于先前存在的方法有相同函数名字,而且必须拥有不同
                  的函数签名,至于返回类型和访问级别可以相同也可以不同
任何拥有于先前存在的方法相同的函数名,不同色调签名方法,都将被看做是那个方法的一个重载并且不会隐藏先前存在的方法        
如果一个继承类被强制转换为的他的一个基类并且一个重写的方法被调用:
       if 新的方法是重写的,则对象的类型决定那个方法被调用,而不是变量。
                 这种情况下继承类的方法被调用
       if 新的方法是隐藏的,则变量的类型决定那个方法被调用,而不是对象。
                  这种情况下基类的方法被调用
  • 抽象方法
在基类中定义的并且必须在派生类中重写的方法,
在基类使用abstract关键字定义
在派生类使用overide关键字定义
 
  • 版本
定义了基类虚方法后,子类定义同名方法,但没写new或override,会出现编译错误,所以子类要定义关键字。
  • System.Object类
所有类都隐含从这个类派生。
比较有用的方法有。ToString(),返回一个与对象的类名相等的字符串,mycar.ToString()等于类名Car;静态方法Equals(object,object),Car.Equals(mycar,myothercar),对比两个对象是否相等;静态方法ReferenceEquals(object,object),对比两个对象引用是否引用同一个对象,Car.ReferenceEquals(mycar,myothercar);GetType()返回对象的类,或返回变量的类型,mycar.gettype()返回类名;Finalize(),允许对象在垃圾收集器从内存删除对象之前进行清除工作;MemberwiseClone,创建对象的拷贝,mycar.MemberwiseClone返回拷贝对象。
比如,可在类中重写虚方法ToString,实现返回一个域值
  • 重载System.Object类方法
因为都是从System.Object类继承,所以可重载System.Object类的虚方法virtual
  • 包装和解包
包装:把变量隐式包装成一个system.object对象,简写成object
解包:把变量包装的object对象,解包成变量。
int myint =10;
可显示写成
int myint =10;
object myobject = myint;这里是包装
int myint2 = (int)myobject;这里是解包
因为有隐含的包装和解包,可以像使用对象一样使用变量,如myint.tostring(),如myint.gettype()。
  • 抽象类和抽象方法
抽象类用abstract,代表概念,可派生出代表实际的类
抽象方法也是abstract,在派生类中,这个方法必须被重写,并必须包含代码。
特点,不能创建抽象类的对象;不能标记构建函数为抽象的;可以用抽象类派生另一个类(包括抽象类);必须在派生类用代码重写基类的抽象方法。
  • 密封类和方法sealed
密封类和密封方法限制继承和多态。即不能继承密封类,不能重载重写密封方法。在public等前加sealed
  • 强制转换对象
基类和派生类之间可互相转换,可跨级转换,只要其中一个类是另一个类的基类或更上级基类。
转换后的效果是,只能存取转换后的类的成员了。
向上转换,转换成基类fatherclass myfatherclass = (fatherclass) mychildclass;
向下转换,转换成派生类 childclass mychildclass = (childclass )myfatherclass;
  • 存取访问限制
  • 重载运算符
重写算术运算、比较值等。
比如==,当比较对象时,其实比较的是对象变量的引用,如果想比较对象的实例域,就不能用默认的静态的==了,可以用重写默认的静态的==,如果重写了==和Equals,就必须重写!=,即重写了一个运算符,就必须重写与其相对的运算符,如==和!=,<和>。
public static bool operator == (class1 myclass1,class2 myotherclass1){}
比如+,当比较对象时,会编译报错,因不能简单的加两个对象,可以重写+,实现加对象的实例域的值。
public static class1 opertator +(class1 myclass1,class2 myotherclass1){}
 
 

C#-派生类的更多相关文章

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

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

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

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

  3. 《Entity Framework 6 Recipes》中文翻译系列 (16) -----第三章 查询之左连接和在TPH中通过派生类排序

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-10应用左连接 问题 你想使用左外连接来合并两个实体的属性. 解决方案 假设你有 ...

  4. C++中虚继承派生类构造函数的正确写法

    最近工作中某个软件功能出现了退化,追查下来发现是一个类的成员变量没有被正确的初始化.这个问题与C++存在虚继承的情况下派生类构造函数的写法有关.在此说明一下错误发生的原因,希望对更多的人有帮助. 我们 ...

  5. c# 中基类变量指向派生类对象的实例化

    这一篇文章转载自:http://www.xuebuyuan.com/390279.html 我对这篇文章进行了一一的验证,确实是这样子的,也明白了很多东西,觉得很有用,转载过来希望能够帮助大家. 1. ...

  6. 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)

    [源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...

  7. 【转载】C++中的基类与派生类

    转自:http://www.cnblogs.com/sujz/articles/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的 ...

  8. C++中public,protected,private派生类继承问题和访问权限问题

    C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...

  9. (转) C++中基类和派生类之间的同名函数的重载问题

    下面有关派生类与基类中存在同名函数 fn: class A { public: void fn() {} void fn(int a) {} }; class B : public A { publi ...

  10. Abstract和Virtual和interface , 派生类中重写 override / new关键字

    http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html C#中Abstract和Virtual 在C#的学习中,容易混淆virtua ...

随机推荐

  1. Linux系统之更改默认块大小

    查看操作系统块大小:#tune2fs  -l /dev/sda1 |grep 'Block size'               ( tune2fs  -l  /dev/sda1可以查看更多相关文件 ...

  2. 基于 tensorflow 的 mnist 数据集预测

    1. tensorflow 基本使用方法 2. mnist 数据集简介与预处理 3. 聚类算法模型 4. 使用卷积神经网络进行特征生成 5. 训练网络模型生成结果 how to install ten ...

  3. jQuery:总体掌握

    链式编程....方法多,属性无法得到对象进行链式.vs10自动完成.书籍锋利的jQuery vsdoc有智能提示开发时候用,开发完之后,换成min压缩版的. 经验:打开网站文件夹.可以把vs网站上的解 ...

  4. SQL 存储过程 超市小票打印

    create database chaoshils--创建一个数据库 go use chaoshils--使用这个数据库 go create table gongying--创建一个供应商的表格 ( ...

  5. Maven(一)——Maven入门

    一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1. ...

  6. git的一些常用操作命令

    这些操作命令都是从廖雪峰老师的官网上看过后记下来的,以下是廖雪峰老师的官网,大家可以看看,教程不错~ http://www.liaoxuefeng.com/wiki/00137395163059296 ...

  7. Excel Sheet Column Title (STRING - TYPE CONVERTION)

    QUESTION Given a positive integer, return its corresponding column title as appear in an Excel sheet ...

  8. VMware安装Windows注意

    安装Windows通用步骤,分区,重建分区表,重写MBR引导.安装即可. VMware安装Windows 如果进不了CM/ROM,在.vmx文件里: 加入一行:bios.forceSetupOnce ...

  9. python之三级菜单作业

    作业需求如下 1.根据用户的输入打印相应的省.市.县的信息 2.每次只要用户输入b,则返回上一级菜单 3.每次只要用户输入q,则直接退出 4.用户输错需要有提示 homework_dict = {'内 ...

  10. spring监听与IBM MQ JMS整合

    spring xml 的配置: 文件名:applicationContext-biz-mq.xml <?xml version="1.0" encoding="UT ...