您的位置:首页 > 编程语言 > C#

C#的一些学习笔记

2012-11-16 21:27 246 查看
只读字段 可以在声明时赋值 也可以在类的构造函数中赋值。也可以不赋值。

只读字段能够是任何类型包括”引用类型“

常量只能在声明时赋值

名称空间可以按逻辑对类划分。

增强可读性(System.Windows.Forms.Form)

减少了雷鸣的冲突(my classes &your classes)

过度使用USING带来了的问题

干扰可读性

增加名称冲突的可能性

使用alias是一种折中的方式

using Dataa=Xjn.Service;

名称空间 用途

Microsoft.VisualBasic VB6 compatibility

System core classes,types

System.Collections Data structures

System.Data Database access

System.Net NetWorking

System.Windows.Forms GUI

System.XML XML processing

什么是封装(encapsulation)

封装的好处

良好的封装能够减少耦合

类内部的实现可以自由地修改

类具有清晰的对外接口

实现封装的方法-访问限制修饰符

public 无限制,允许任何人来访问

protected internal = protected + internal

Internal 允许项目或程序内部的类来访问

protected 继承子类可以对基类有完全访问权

private 只允许统一个类中的成员访问

C#中只支持单继承

防止继承

sealed--->防止继承

public sealed class XXXXX

派生类可以调用基类的方法

使用base关键字

(基类)A.Count ==(子类) base.Count

派生类不能访问基类的private成员

internal的基类成员只能被同一个程序集的派生类访问

Account基类 CheckAccount() 子类

CheckAccount ca = new CheckAccount() ok

Account acc = new CheckAccount() ok 用基类对象引用 实例化子类的对象

CheckAccount ca2 = acc cancel 原因子类的对象引用 无法实例化基类的对象

CheckAccount chk =acc (error)

CheckAccount chk = (CheckAccount)acc;//强制类型转换

如果acc不是CheckAccount的对象则会抛出System.InvalidCastException

多态性

面向对象程序设计中的重要概念 多态性

在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

多态性通过派生类覆写基类中的虚函数方法来实现

编译时的多态性

编译时的多态性是通过重载来实现的,对于非虚的成员来说,系统在编译时,根据传递的参数、返回类型等信息决定实现和中操作。

运行时的多态性

运行时的多态性就是指直到系统运行时,才根据实际情况决定实现各种操作。

C#中,运行时的多态性通过覆写虚成员实现。

重载(Overload) 特点

方法名必须相同

参数列表必须不同

返回值类型可以不相同

虚拟函数

声明虚方法

使用virtual关键字 public virtual bool Withdraw();

调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写方法。

虚方法可以有实现体

覆写(override)

子类中为满足自己的需要来重复定义某个方法的不同实现--覆写

通过适用关键字override来覆写

public override bool Withdraw(..)

只有虚方法和抽象方法才能被覆写

要求(三相同)

相同的方法名称

相同的参数列表

相同的返回值类型

items Override覆写 Overload重载

位置 存在于继承关系的类中 存在于同一类中

方法名 相同 相同

参数列表 相同 必须不同

返回值 相同 可以不相同

抽象方法

抽象方法是必须被派生类覆写的方法

抽象方法是可以看成是没有实现体的虚方法

如果类中包含抽象方法,那么类就必须定义抽象类,不论是否还包含其他一般方法

public abstract bool Withdraw();

何时使用继承?

代码重用,减少编写的代码量

设计重用

公用的字段和方法可以放到父类中,然后由其派生新的子类,子类有自己的方法和字段。

经验而言--:"IS a"的关系

如果A类是B类继承而来 即A是B的子类,那么我们可以说"Class A is-a Class B"

接口

接口为类提供了蓝图

接口只提供定义

实现接口的数据类型必须提供接口成员的实现

接口本身可以从多个基接口派生

构造函数有参数类型但没有返回值

public BankCustomer(string fn,string ln,decimal bal)

{

this.fn=fn;

this.ln=ln;

this.bal=bal;

}

属性Property

内部看像函数,外部看像字段

读/写由get/set存取器来进行

没有参数列表

Adv:可以像给公有字段赋值一样轻松,同时允许通过get/set来控制对属性的访问

委托Delegate

public delegate double DelegateCompute(double x);

public static double Computer(double x,DelegateCompute y)

{

return y(x);

}

委托的声明方式和方法的声明相似,包括的是delegate关键字

5201690130034246
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: