C#复习⑤

2016年6月19日

22:39

Main Inheritance 继承

1.继承的语法结构

class A { // base class

int a;

public A() {...}

public void F() {...}

}

class B : A { // subclass (inherits from A, extends A)

int b;

public B() {...}

public void G() {...}

}

C#中类的继承只能是单继承,在Java中也只支持单继承,C++中支持多继承。但是C#、Java、C++均可以实现多个接口。

Single inheritance: a class can only inherit from one base class, but it can implement multiple interfaces.

某个类只能继承一个父类不能继承自结构体。

A class can only inherit from a class, not from a struct.

结构体不能被继承,但是可以实现多个接口。

Structs cannot inherit from another type, but they can implement multiple interfaces.

C#中所有的类的基类为Object类

A class without explicit base class inherits from Object.

2.Assignments and Type Checks分配和类型检查

class A {...}

class B : A {...}

class C: B {...}

  3.Overriding Methods重写方法

  只有在父类中声明为Virtual的方法才可以在子类中重写

  Only methods that are declared as virtual can be overridden in subclasses

  

  方法签名必须相同;

  Method signatures must be identical

  same number and types of parameters (including function type!)

  same visibility (public, protected, ...).

  属性和索引器同样可以被重写(对应关键字virtual 和 override);

  Properties and indexers can also be overridden (virtual, override).

  静态方法不可以被重写。

  Static methods cannot be overridden.

4.Dynamic Binding 动态绑定

动态绑定的好处:可以使用下面的方法针对不同类构造出的实例对象均有效。

class A {

public virtual void WhoAreYou() { Console.WriteLine("I am an A"); }

}

class B : A {

public override void WhoAreYou() { Console.WriteLine("I am a B"); }

}

调用举例:

A a = new B();

a.WhoAreYou();                // "I am a B"

动态绑定举例:

void Use (A x) {

x.WhoAreYou();

}

Use(new A());        // "I am an A"

Use(new B());        // "I am a B"

5.Hiding覆盖

在子类中成员函数可以被new关键字修饰;

使用new关键字修饰可以将那些和父类有相同函数名和签名的成员函数隐藏;

举例说明:

class A {

public int x;

public void F() {...}

public virtual void G() {...}

}

class B : A {

public new int x;

public new void F() {...}

public new void G() {...}

}

B b = new B();

b.x = ...;                // accesses B.x调用 b的x

b.F(); ... b.G();        // calls B.F and B.G调用的F函数和G函数

((A)b).x = ...;        // accesses A.x 调用A的x

((A)b).F(); ... ((A)b).G();         // calls A.F and A.G(although the dynamic type of (A)b is B)

//调用A的F函数和G函数,尽管(A)b的类型是B

6.Dynamic Binding (with Hiding)动态绑定(带覆盖即new关键字)

举例说明:

第一个简单的例子:

稍复杂点的例子:

7.子类中的构造函数

8.Visibility protected and internal可见性保护和internal

Protected:

在当前类中可见以及子类中可见

Visible in the declaring class and its subclasses(more restrictive than in Java)

Internal:

在当前Assembly可见

Visible in the declaring assembly (see later)

protected internal:

在当前类中、子类中、当前Assembly中可见

Visible in declaring class, its subclasses and the declaring assembly

9.抽象类和抽象方法

abstract class Stream {

public abstract void Write(char ch);

public void WriteString(string s) { foreach (char ch in s) Write(ch); }

}

class File : Stream {

public override void Write(char ch) {... write ch to disk ...}

}

注释:

抽象方法不能有实现;

Abstract methods do not have an implementation.

抽象方法隐藏着virtual关键字;

Abstract methods are implicitly virtual.

如果一个类中有抽象方法那么这个类也要声明为抽象类;

If a class has abstract methods (declared or inherited) it must be abstract itself.

抽象类不能实例化对象

One cannot create objects of an abstract class..

10.Abstract Properties and Indexers抽象属性和抽象索引器

abstract class Sequence {

public abstract void Add(object x);         // method

public abstract string Name { get; }         // property

public abstract object this [int i] { get; set; } // indexer

}

class List : Sequence {

public override void Add(object x) {...}

public override string Name { get {...} }

public override object this [int i] { get {...} set {...} }

}

重写的索引器和属性必须有和基类相同的get和set方法

Overriding indexers and properties must have the same get and set methods as in the base class

11.Sealed Classes 密封类

sealed class Account : Asset {

long balance;

public void Deposit (long x) { ... }

public void Withdraw (long x) { ... }

...

}

注释:

密封类不能扩展即继承(在Java中对应关键字final),但是可以继承自其他类;

sealed classes cannot be extended (same as final classes in Java),
but they can inherit from other classes.

重写方法可以被声明为单独的密封

override methods can be declared as sealed individually

12.Class System.Object Object类

class Object {

protected object        MemberwiseClone() {...}

public Type         GetType() {...}

public virtual bool         Equals (object o) {...}

public virtual string        ToString() {...}

public virtual int         GetHashCode() {...}

}

//Directly usable:

Type t = x.GetType();//returns a type descriptor (for reflection)

object copy = x.MemberwiseClone();//浅拷贝does a shallow copy (this method is protected)

//Overridable in subclasses:

x.Equals(y) //should compare the values of x and y

x.ToString() //should return a string representation of x

int code = x.GetHashCode(); //should return a hash code for x

Example

13.重载==和!=运算符

C#复习⑤的更多相关文章

  1. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  2. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  3. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

  4. 复习(1)【Maven】

    终于开始复习旧知识了,有输入必然要有输出.输入和输出之间的内化过程尤为重要,在复习的同时,真正把学到的东西积淀下来,加深理解. Maven项目概念与配置 Maven是一个项目管理和综合工具.Maven ...

  5. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  6. JS复习--更新结束

    js复习-01---03 一 JS简介 1,文档对象模型 2,浏览器对象模型 二 在HTML中使用JS 1,在html中使用<script></script>标签 2,引入外部 ...

  7. jQuery 复习

    jQuery 复习 基础知识 1, window.onload $(function(){});   $(document).ready(function(){}); 只执行函数体重的最后一个方法,事 ...

  8. jQuery5~7章笔记 和 1~3章的复习笔记

    JQery-05 对表单和表格的操作及其的应用 JQery-06 jQuery和ajax的应用 JQery-07 jQuery插件的使用和写法 JQery-01-03 复习 之前手写的笔记.实在懒得再 ...

  9. HTML和CSS的复习总结

    HTML(Hypertext Markup Language)超文本标记语言:其核心就是各种标记!<html> HTML页面中的所有内容,都在该标签之内:它主要含<head>和 ...

  10. 2017年1月1日 java学习第二天复习

    今天是新年的第一天,以前学习没有总结习惯,学习效率和成果都很不好.  学习的过程就是反复的复习和不断学习的过程,开始今天的学习总结   学习java的第二天. 今天学习了java最基础的一些内容,照着 ...

随机推荐

  1. 基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

    为了提高客户体验和进行一些技术探索,现在正准备把我自己的客户关系管理系统CRM在做一个Web的版本,因此对基于MVC的Web界面继续进行一些研究和优化,力求在功能和界面上保持和Winform一致,本文 ...

  2. 水晶报表13.x(Crystal Reports for VS2010)的安装部署经验

    这两天搞安装包真心坎坷,一个问题接一个问题,先是为了实现自定义动作现啃vbs,后面又是安装过程老是报错: 各种搜索.各种尝试,总算搞掂,积累了些经验,分享一下. 首先CR for VS2010的所有东 ...

  3. Android开发常见错误及技巧

    1.无法使用网络:Permission denied(maybe missing internet permission) 在AndroidMainifest.xml中增加允许使用网络选项(在< ...

  4. 走进异步世界:EnyimMemcached异步化改造引起的内存泄漏

    6月30日我们发布了异步化改造后的博客程序之后,出现了高内存.高CPU.高线程数的不理想情况. 经过一周的追查,终于水落日出——引起不理想情况的根源是我们修改过的EnyimMemcached代码存在内 ...

  5. CodeSnippet.info 开源说明 和 环境搭建 (第一版)

    Github开源声明 本网站的代码开源,开源的目的如下 技术分享 希望业内同行贡献代码 希望能够让网站更加安全 开源地址: CodeSnippet开源地址 关于代码贡献 任何人都可以贡献代码,一般在 ...

  6. 基于吉日嘎拉的OA协同办公模块重写

    这一个月的业余时间主要是在忙这个重构的事情,将吉日嘎拉自带的文档管理.公司公告.留言板.通讯录.周任务.考勤,全部重新建表,重构代码和UI. 目前根据中小企业常用的日常办公需要,搞定了公告栏.任务中心 ...

  7. PHP程序员7小时学会Kotlin 第二小时

    Kotlin中,一切皆对象:PHP则并非一切皆对象,甚至不需要对象的存在即可完成系统功能开发,我们现在可以接触到的旧的系统都可以说明这一点. 基本数据类型 数值型 类型 位长 双精度浮点型Double ...

  8. NYOJ 746---整数划分(四)(区间DP)

    题目链接 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经 ...

  9. Windows Git中文文件名乱码

    在Windows下使用git,安装包如下: https://git-for-windows.github.io/ 在使用git bash时git 默认中文文件名是 xx% 是因为 对0x80以上的字符 ...

  10. [翻译] Autofac 中注册的概念

    原文链接:http://docs.autofac.org/en/latest/register/registration.html 所谓注册组件,是指创建 ContainerBuilder 的实例,并 ...