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

最新文章

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

热门文章

  1. Hue 工具使用
  2. T分布、卡方分布、F分布
  3. ubuntu 关闭触控板
  4. laravel5.5jwt-auth的使用
  5. MySQL☞order by与distinct
  6. Oracle 11g 审计跟踪管理
  7. 初学者学习python2还是python3?
  8. DPDK 网卡RSS(receive side scaling)简介
  9. java线程(6)——线程池(下)
  10. ActiveMQ使用详解---相关概念