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
最新文章
- Arcgis Engine 切割图斑(ITool)
- C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~
- C#线程系列讲座(5):同步技术之Monitor
- JavaWeb学习总结
- BASE64编码规则及C#实现
- SRM 446(1-250pt, 1-500pt)
- C# 枚举 字符串 转换
- Inno Setup 系统托盘图标插件 TrayIconCtrl V1.5
- 怎样学习使用libiconv库
- 菜鸟互啄:WINFORM如何实现无聚焦框的Button按钮
- 模板——无旋Treap
- Oracle Database 11g : SQL 基础
- 一次完整的从webshell到域控的探索之路
- CentOS 7 搭建CA认证中心实现https取证
- day37-多进程多线程二-锁
- netcore webapi统一配置跨域问题
- HTML的属性
- sqlserver2008R2数据库自动备份脚本
- python3处理json文件中含有中文dumps的应用
- sendsms短信验证功能实现代码