C#学习笔记二


********************************封装******************************

1.内存模型:分为

1.1栈:储存引用类型的变量(地址) 由clr中控控制

1.2堆:数据区(多份储存)

1.3代码区(源数据):类定义,类字段定义,类方法定义,静态字段定义,静态方法定义,静态字段的数据


2.最好的原则是:(能不能访问,主要看,访问期间各个数据是否存在,静态数据时编译期就存在的,在数据区中,而实例的数据时运行期才有,堆中的东西一般都是运行期才有)

a.实例的方法访问实例成员

b.静态方法访问静态成员(也要符合封装的要求)

c.但实例不能访问静态的成员

d.静态函数只构造一次


3.数据在程序中传递时,无论是作为输入还是输出(使用数据之前,还是得到结果之后)都要谨慎验证数据的有效性;

尤其是对于对象的使用要验证其是否为null(著名的空引用异常)


4.在类实例化的时候,先调用静态构造函数,然后调用实例构造函数(载入内存,或者开辟内存,就是实例化)


******************************异常*********************************

1.

catch(FormatException fe)

{

...对fe异常进行处理

}

catch(overFlowException ofe)

{

..堆ofe异常进行处理

}

catch(Exception ex)  // 最后都处理不了的异常有Exception来处理,加一个总保险

{

ex ....//来处理处理不了的异常,总保险

}


2.一般有多层继承时,子类继承的是最近一的上一层父类的成员

3.virtual于override要成对出现

3.当子类在进行构造的时候,首先构造父类,如后添加子类的其他东西(使用子类实例包含父类实例)---->滚雪球模式

4.

a.子类实例不会额外对父类进行copy,而是一种包含关系,所以子类Horse中的name,其实就是父类Animal中的name(只此一份)//除非Horse对name进行重写

b.子父类的源数据时分开存储的,但是数据时相互包容的


5.静态构造函数前不能加public(因为静态构造函数不是提供给外部调用的,而是持续自行调用的)

6. GetHashCode( )方法可以得到某个实例内存中的哈希地址,如果两个实例的哈希地址相同,则在内存中是同一个东西

7.子类调用父类的构造函数也相当于从类外调用,所以父类的构造函数不能为private

8.抽象类虽然不能实例化,但是可以放置一些标准以供后面的类使用

9.做类时,要让类的风格明确,根据功能加前缀,sealed,abstract,static,如:

public  static class  Tools  // 如果不需要继承,只是作为工具,呢么可以是static类

{

public Tools (  ) {   }  // 静态类不能有实例化构造函数

}


10.兄弟类之间不能进行强行转换,只有父子类之间才能进行强制转换

11.类的功能分类

a.节点类

b.集合类

c.工具类

d.界面类


12.一个事物如果描述起来比较复杂就应该为其创建类

13.在设计程序的时候,尽量使用接口,使类于类,方法与方法之间可以相互独立,减少关联错误


15.使用基类引用调用子类实例方法,叫做多态:

a.抽象方法支持多态

b.方法重写不支持多态(当父引指向子实例的时候,调用的是父类方法)

c.虚方法(virtual)+override -->支持多态

d.虚方法(virtual)+new----->相当于方法重写,不支持多态

//接口引用页可以实现多态(接口其实就是一种只有功能的类)


16.当一个实例实现了某个接口,就可以被该接口强转,-->并且转换为只被该接口识别的内容

17.当使用接口作为参数时,不要去实现该接口而得到一个类型(因为C#的接口方法内部构造是很复杂的),而是要到类库中找到一个能识别,且已经实现了该接口的类型作为参数(就是继承了该接口的类型作为参数)


18.

( ( IshowPersonTwo)ider ).GetHashCode( )    //ider继承了IshowPerson接口的实例

//ider套一个IshowPersonTwo就相当于ider展示一下IshowPerson方面的功能

//用什么类型强转,就相当于让被转换的数据只保留目标类型的数据,如果是接口就是为了实现功能(接口也是类)

19.做接口的目的是就为了降低耦合性,增加独立性,所以一般接口不会进行继承

20.接口可以重写,但无实际意义


************************************IO************************************


1.”==“实际上比较的是两块数据的hashcode ,所以如果数据是同一个地址,呢么就是相同的。

2.重写不同于重载:

a.重载的方法签名是不一样的,因为参数的多少是不一样的

b.重写的参数应一致,一般对应virtual


3.char是个结构,string是个类

4.同一个文件上最好同时不要进行2个流的操作,否则会出错。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值