1、所有的类都继承自object

2、如何隐藏基类的成员

要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称。

通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员。请记住,签名由名称和参数列表组成,但不包括返回类型。

要让编译器知道你在故意隐藏继承的成员,使用new修饰符,没有它,程序可以成功编译,但编译器会警告你隐藏了一个继承成员。

也可以隐藏静态成员。

class SomeBase

{

public string cFiled;

}

class SomeClass : SomeBase

{

new public string cFiled;

}

3、基类访问使用base.的形式。

4、虚方法和覆写方法

基类的方法使用virtual,派生类的方法使用override,这样,就可以在派生类中,改变基类的方法。

覆写的方法和被覆写的方法必须有相贩 可访问性,换一种说法,被覆写的方法不能是private,而覆写的方法是public。

不能覆写static或非虚方法。

方法、属性和索引,以及称为事件的另一种类型,它们都可以被声明为virtual和override。

用override和new覆写函数

class Program

{

static void Main(string[] args)

{

MyBaseClass cBase = new MyBaseClass();

cBase.Print();

MyDerivedClass cDevrived = new MyDerivedClass();

cDevrived.Print();

SecondDerived cSecond = new SecondDerived();

cSecond.Print();

MyBaseClass cBase2 = (MyBaseClass)cSecond;

cBase2.Print();

cBase2.Print2();

Console.ReadKey();

}

}

class MyBaseClass

{

virtual public void Print()

{

Console.WriteLine("This is the base class");

}

virtual public void Print2()

{

Console.WriteLine("This is the base class");

}

}

class MyDerivedClass : MyBaseClass

{

public override void Print()

{

Console.WriteLine("This is the derived class");

}

override public void Print2()

{

Console.WriteLine("This is the derived class");

}

}

class SecondDerived : MyDerivedClass

{

public override void Print()

{

Console.WriteLine("This is the Second Derived Class");

}

new public void Print2()

{

Console.WriteLine("This is the Second Derived Class");

}

}

输出内容:

用override不仅可以覆写函数,还可以覆写属性。

5、构造函数的顺序

6、声明为public的程序,可以跨程序集继承。

7、访问成员的区域

private 只在类的内部可访问

internal 对该程序集内所有类可访问

protected 对所有继承该类的类可访问

protected internal 对所有继承该类或在该程序集内声明的类可访问

public 对任何类可访问

8、抽象成员

用abstract修饰符标记,方法、属性、事件、索引均可以抽象。抽象成员没有实现体,被分号取代。而且必须被覆写。

①尽管抽象成员必须在派生类中用相应的成员覆写,但不能把virtual修饰符加到abstract修饰符。

②就像虚成员,派生类中抽象成员的实现必须指定override修饰符。

9、抽象类

抽象类只能用作其它类的基类不能实例化。用abstract声明。

任何派生自抽象类必须使用override关键字实在该类所有的抽象成员,除非派生类自己也是抽象类。

10、密封类

用sealed声明,必须是独立的类,不能用作基类。

11、静态类

静态类需要声明为static,所有成员必需是静态的,可以有静态构造函数,但没有实例构造函数,不能创建该类的实例。静态类是隐匿是密封的。

12、扩展方法

class MyData

{

private double dbD1;

private double dbD2;

private double dbD3;

public MyData(double d1, double d2, double d3)

{

dbD1 = d1;

dbD2 = d2;

dbD3 = d3;

}

public double Sum()

{

return dbD1 + dbD2 + dbD3;

}

}

static class ExtendMyData

{

public static double Average(this MyData md)

{

return md.Sum() / 3;

}

}

则可以直接用以下方法调用:

MyData md = new MyData(3, 4, 5);

Console.WriteLine("Average:{0}", md.Average());

Console.ReadKey();

this必需作为第一参数,如果需要给 Average加参数,参考如下:

public static double Average(this MyData md,int icount)

{

return md.Sum() / icount;

}

调用时:

MyData md = new MyData(3, 4, 5);

Console.WriteLine("Average:{0}", md.Average(3));

Console.ReadKey();

C#图解教程读书笔记(第7章 类和继承)的更多相关文章

  1. SQL Server2012 T-SQL基础教程--读书笔记(1-4章)

    SQL Server2012 T-SQL基础教程--读书笔记(1-4章) SqlServer T-SQL 示例数据库:点我 Chapter 01 T-SQL 查询和编程背景 1.3 创建表和定义数据的 ...

  2. SQL Server2012 T-SQL基础教程--读书笔记(5-7章)

    SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5. ...

  3. 【C#4.0图解教程】笔记(第1章~第8章)

    第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...

  4. C++ primer plus读书笔记——第13章 类继承

    第13章 类继承 1. 如果购买厂商的C库,除非厂商提供库函数的源代码,否则您将无法根据自己的需求,对函数进行扩展或修改.但如果是类库,只要其提供了类方法的头文件和编译后的代码,仍可以使用库中的类派生 ...

  5. C++ primer plus读书笔记——第12章 类和动态内存分配

    第12章 类和动态内存分配 1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形或枚举型const,则可以在类声明中初始化 ...

  6. C#图解教程读书笔记(第2章 C#编程概述)

    这章主要是一个对于C#程序的概括解释 和C/C++不同,不是用include声明引用的头文件,而是通过using的方式,声明引用的命名空间. 命名和C/C++类似,并且也是区分大小写的,这件事情在VB ...

  7. C#图解教程读书笔记(第1章 C#和.net框架)

    C#中的主要需要记住的基础概念 CLR公共语言运行库 CIL中间语言,所有的代码都会编译成中间语言. CLI公共语言基础结构 C#的优点 C#有自动垃圾回收机制

  8. C#图解教程读书笔记(第15章 委托)

    委托是C#的一个很重要的知识点. 1.什么是委托 委托在我认为,就是一系列格式相同的方法列表,可能就是定义的名称不一致,参数.返回值等都是一样的. 2.如何声明委托 delegate void MyF ...

  9. C#图解教程读书笔记(第9章 语句)

    文件头的Using是Using指令,不是using语句 using (TextWriter tw = File.CreateText("xixi.txt")) { tw.Write ...

  10. C#图解教程读书笔记(第8章 表达式和运算符)

    表达式 字面量 整数字面量 字符字面量 字符串字面量 求值顺序 优先级 结合性 与C和C++不同,在C#中的数字不具有布尔意义. 各种运算符的作用(过) 用户定义类型转换 class XiXiInt ...

随机推荐

  1. Game-Tech小游戏专场第二趴,这次帝都见

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 自从小游戏推出以来,凭借微信带来的巨大流量和变现能力,小游戏生态极速地建立了起来,短短半年多时间已经出 ...

  2. 【c++】流状态的查询和控制

    源自 c++primer 4th, 248页 代码 #include <iostream> #include <limits> #include <stdexcept&g ...

  3. log4j 详细讲解

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...

  4. vue加载Element ui地址省市区插件-- element-china-area-data

    1.安装 npm install element-china-area-data -S 2.使用(引入) import { provinceAndCityData, regionData, provi ...

  5. Lucene学习之四:Lucene的索引文件格式(1)

    本文转载自:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html Lucene的索引里面存了些什么,如何存放的,也即 ...

  6. JVM(五) class类文件的结构

    概述 class类文件的结构可见下面这样图(出处见参考资料),可以参照下面的例子,对应十六进制码,找出找出相应的信息. 其中u2 , u4 表示的意思是占用两个字节和占用四个字节,下面我们将会各项说明 ...

  7. Angular4 step by step.2

    1.使用CLI命令生成的项目,直接把css ,和 template 给独立到文件中了,看着 `` 扎眼 哇咔咔 2.项目效果图:

  8. Cheatsheet: 2017 02.01 ~ 02.28

    Web Debouncing and Throttling Explained Through Examples What is TypeScript? An Absolute Beginner's ...

  9. Django之路由、模板和模型系统 (转载)

    一.路由系统 浏览器会自动给url后加一个“/” django会自动给路由的正则表达式前面加一个“/” django会给任何不带“/”结尾的url语句添加“/”(可设置) 短路路由规则:匹配到第一条就 ...

  10. JS之捕获冒泡和事件委托

    一.事件流(捕获,冒泡)   事件流:指从页面中接收事件的顺序,有冒泡流和捕获流. 当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒 ...