Lesson 3
1、关于面向对象的三个重要属性
Encapsulation(封装):无法直接访问类的成员变量,而是通过一些get set方法,间接访问数据域;
Polymorphism(多态):静态绑定,动态绑定,通常通过继承来实现多态,通常通过重定义(override)父类的方法来实现,
在c#中,与c++类似(java则不需要),基类function必须定义为virtual才能实现多态动态绑定,从个人理解来说,是因为子类同时可以看做是‘父类’,或子类包含父类,因此父类的引用可以指向子类的实体,并且可调用子类中重定义的函数。
Inheritance(继承):c#与java都不允许多重继承(c++允许),但可以通过定义接口(interface)来实现多重继承。
2、c#中参数的类型:
(1)数值参数,直接copy,按值传递
(2)引用参数(加ref),同c++中的&运算符
例:void swap(ref num1,ref num2);
(3)输出参数out(与ref类似),实参传入时可不被赋值,但在函数返回前一定要被赋值。
注:ref 与 out 在函数声明与调用时都得加上(即形参实参前都得加上)

(4)数组参数 params(只能是一维数组)
实参可以是同类型的数组名,也可以是若干个同类型的简单变量,并且在函数形参列表中要放在最后


3、c#中的特殊地方:
(1)引入property(属性)
[访问修饰符] 类型 属性名
{
get{}
set{} // set属性带隐含的value值
}
(2)引入索引器(与属性类似)
[访问修饰符] 类型 this [ 类型 variable_name]
{
get{}
set{} // set属性带隐含的value值
}
3、继承(DerivedClass :BaseClass)
(1)单一继承(同java)
(2)constructor 与 distructor 不被继承
(3)override 可覆盖基类函数,通过 base 关键字调用访问基类函数
(4)继承后的构造函数链和析构函数链





(5)调用基类constructor
public DerivedClassName (variable a,variable b,variable c):BaseClassName(a,b)
{
......
}
4、抽象类与interface
(1)抽象类
abstract class A{
abstract public type function()
{
//没有函数实体
}
}
class B :A
{
public override type function()
{
//必须有函数实体
}
}
(2)interface 实现多重继承
[访问修饰符] interface InterfaceName
{
[访问修饰符] type function()
//属性,方法只能定义不能实现
}
在子类中有两种接口成员的实现:隐式 & 显式
隐式与java同
显式带有接口名前缀,同时该方法只能通过接口成员的引用来调用
5、多态
(1)Base类必须定义为 virtual 函数
(2)子类 override 父类函数,而不能是 new



Lesson 3的更多相关文章
- Lesson 18 He often does this!
Text After I had had lunch at a village pub, I looked for my bag. I had left it on a chair beside th ...
- Lesson: The "Hello World!" Application
Lesson: The "Hello World!" Application The sections listed below provide detailed instruct ...
- [小北De编程手记] : Lesson 06 玩转 xUnit.Net 之 定义自己的FactAttribute
xUnit.Net本身提供了标记测试方法的标签Fact和Theory.在前面的文章<Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动>中,也对它 ...
- [小北De编程手记] : Lesson 04 玩转 xUnit.Net 之 Fixture(下)
上一篇文章<[小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)>向大家介绍了xUnit.Net 共享数据的方式.Test Case的构造函数 ...
- [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动
关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Ne ...
- [小北De编程手记] : Lesson 01 玩转 xUnit.Net 之 概述
谈到单元测试,任何一个开发或是测试人员都不会觉得陌生.我想大多数的同学也都是接触过各种单元测试框架.关于单元测试的重要性,应该不会有太多的质疑.这个系列,我向大家介绍一下xUnit.Net的使用.就让 ...
- [小北De编程手记] : Lesson 08 - Selenium For C# 之 PageFactory & 团队构建
本文想跟大家分享的是Selenium对PageObject模式的支持和自动化测试团队的构建.<Selenium For C#>系列的文章写到这里已经接近尾声了,如果之前的文章你是一篇篇的读 ...
- [小北De编程手记] : Lesson 07 - Selenium For C# 之 窗口处理
在实际的自动化测试过程中,我们会遇见许多需要对窗口进行处理的情况.比如,点击删除某条信息的时候系统会显示一个Alert框.或者点击某个超链接时会在浏览器中打开一个新的页面.这一篇,来和大家分享一下Se ...
- [小北De编程手记] : Lesson 06 - Selenium For C# 之 流程控制
无论你是用哪一种自动化测试的驱动框架,当我们构建一个复杂应用程序的自动化测试的时候.都希望构建一个测试流程稳定,维护成本较低的自动化测试.但是,现实往往没有理想丰满.而这一篇,我会为大家讲解我们在使用 ...
- [小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建
在我看来一个自动化测试平台的构建,是一种很好的了解开发语言,单元测试框架,自动化测试驱动,设计模式等等等的途径.因此,在下选择了自动化测试的这个话题来和大家分享一下本人关于软件开发和自动化测试的认识. ...
随机推荐
- 在Linux中安装和配置OpenVPN Server的最简便方法!
本文介绍了如何在基于RPM和DEB的系统中安装和配置OpenVPN服务器.我们在本文中将使用一个名为openvpn-install的脚本,它使整个OpenVPN服务器的安装和配置过程实现了自动化.该脚 ...
- GDB抓虫之旅(上篇)
本文来自网易云社区. 作者:盛国存 前言 问: gdb是什么? 答: 强大的UNIX下命令行调试工具. 问: gdb能干什么? 答: 让你随心所欲的驾驭你的程序:Start.Stop.Examine. ...
- Python 学习笔记之 Numpy 库——数组基础
1. 初识数组 import numpy as np a = np.arange(15) a = a.reshape(3, 5) print(a.ndim, a.shape, a.dtype, a.s ...
- 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
首先贴上代码原作者的github:https://github.com/chenyuntc/simple-faster-rcnn-pytorch(非代码作者,博文只解释代码) 今天看完了simple- ...
- 官方文档 恢复备份指南六 Configuring the RMAN Environment: Advanced Topics
RMAN高级设置. 本章内容: Configuring Advanced Channel Options 高级通道选项 Configuring Advanced Backup Options 高级备 ...
- 【SSH】——梳理三大框架
[前言] 去年软考,从System.out.println("Hello World!")开始,小编也算是进入java的世界了.转战java以后,虽然仍旧在学习.NET的知识,但越 ...
- 【log4net】- 日志使用教程
一.log4net简介: 1. Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API.因为一旦程序被部署以后,就不太可能再利用专门的调试工具了.然而一个管理员可能需要有一套强大的 ...
- Access-Control-Allow-Methods: OPTIONS & CORS
Access-Control-Allow-Methods: OPTIONS CORS https://stackoverflow.com/questions/20478312/default-valu ...
- 静态化技术Freemarker
什么是Freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP ...
- GET传值
发送页: <form id="form1" runat="server"> <div> <asp:TextBox ID=</ ...