面向对象基础知识01

简介: 面向对象基础知识01

C#面向对象编程的注意事项


* 注意自己的命名,


* [JIT]即时编译:运行到哪里编译到哪里,编译之后就放到了内存之中。


* 局部变量(在方法中申明)必须先付值在使用。


* 越抽象的类就可以当做父类。


* 里氏替换原则:

就是需要一个父类的类型的时候给了一个子类的对象是可以的。


*:快捷键


  *导入命名空间(shift+alt+F10)


  *构造函数:CTOR


  * :base():表示调用父类的构造函数


**This来调用本类的成员,base来调用父类中的成员。


**访问级别约束


*多态的实现  


*:静态的构造函数


   *:在静态类中所包含的所有成员都必须的是静态成员。静态属性只有用类名.出来,不能用实例化对象来点出来。<静态成员的生命周期是很长的,一般在程序退出的时候才会被回收释放资源,而实例化的对象一用完就会被GC回收。>


*记录代码的时候要记其主要的结构,主要的步奏。


   这个是在类里面声明一个静态的属性,其次就是一个隐藏静态的构造函数。静态构造函数只执行一次,(第一次使用静态类,静态成员,静态方法)


静态的构造函数不能手动调用,而是在第一次使用静态类的时候自动调用的,没有访问修饰符,也没有任何参数。具体的值是在里面设置好的。


多态<同一段代码在执行的时候有不同的功能>


*类型的另外一种类型转换


<只是这种转换不提示错误,值变为null,强类型转换则直接报异常。>

Student a=p as Student();

679140-20150911092948731-189571798.jpg

679140-20150911092949778-1670637078.jpg

*抽象类


 《就是在类前面加一个abstract就是抽象类》


一般的类就是抽象的,但是抽象类是比较高级的抽象的类,不能被实例化。

下面是抽象类的一般特性


679140-20150911092951590-163918313.jpg

抽象类只定义不能在其中有具体的实现,智能在继承的子类中进行重写。


*注意以后在使用类属性的时候,在给其属性赋值的时候都要放在构造函数(CTOR)里面。


**练习实例

679140-20150911092952934-1715363095.jpg

*:值类型与引用类型


 值类型:以字节保存在内存《保存在栈》里面,不可继承


 


 引用类型;在堆,栈里面都有保存,在栈里面只保存堆里面的地址,实际的值是放在堆里面的。可以继承


 


 <引用传递,值传递>


     ……引用传递:拷贝栈中的堆地址,指向同一块堆;


     ……ref的引用传递:两个变量指向同一个栈(栈中有数据)的地址,那就是他们指向的堆是同一个,不管改变那一个,堆里面的数据都会改变。


     ……值传递:拷贝栈中的内容,将其作为一个副本。


 (栈里面数据进行拷贝的时候是复制数据,为一个副本)


*:接口问题探讨


在Java里面老师说就看下楼层上面的管道,这样就可以可联想到接口的具体意义。


679140-20150911092953887-1749030088.jpg

接口的定义与命名


 *一般接口以大写I开头,-able结尾,关键字是interface


 *接口里面只能包含方法(方法,属性,索引器,事件)。


 *接口里面都不能写任何访问修饰符。<接口中默认为public的访问修饰符>


 *接口不能被实例化,属性只能写(get;set;)方法,不能再继续写。


 *接口中的成员子类必需全部实现。接口可以“多继承”一个类只能继承自一个父类但是可以实现多个接口。

 Public class interface IFlyable
{
    Void SayHi();
    //索引器
    String this[int index]
   {
       get;set;
    }
}

*:接口实例


接口的实现分为两种,直接实现,显示实现接口,直接实现是公共的public,而显示实现接口是解决重名问题的,为私有的。


679140-20150911092955075-1961436739.jpg

*类型转换


*显式转换,隐式转换,强类型转换(容易丢失精度)


1:sizeof判断其占用几个字节,

{console.writeline(sizeof(int))}


2:隐式转换(当其数据类型一致,且大字节转换为小字节的会发生类型转换。)


3:所有数组的父类是Array类型。


*异常处理


*运行时程序出现的错误


 *finally: 代码清理,释放资源,无论发生了什么它里面的内容都讲会被执行。相当与在C语言里面switch后面的define的含义。


 *当程序中某行代码出错,后面的代码就不会往后执行。


 *对于异常的处理我们可以写多个catch(里面的异常方法不一样)来处理各自的异常。


679140-20150911092955622-1910838200.jpg

*手动异常的抛出<多使用逻辑判断来解决异常。为了不浪费资源。>


 Throw new Exception(“有异常了”)


*方法会为返回值单独设置变量,这样子返回值里面的值就不会改变了。


Ref和Out比较


*比较两个对象是否为同一个对象


Console.writeline(object.ReferenceEquals(p1,p2));
  Console.writeline(object.ReferenceEquals(p1,p3));


若p1和p2为同一对象则返回值为true,若不是则返回值为false.


*关键字sealed<此为密封类>


  在其前面加上一个关键字sealed表示此类不被继承。


*字符串(string )的不可变性和字符串池


   1:String的相加减是字符串的叠加,会开批新的堆内存。


2:字符串常量的保存将能保存到堆内存中,也就是保存在了字符串池中。也相当与保存到块表里面。


<string.IsInterned()>

*字符串


1:字符串格式化


这里是取代站位符,Console.WriteLine(“我今年(0,-10,c2)岁了”,22);


2:StringBuilder类的使用


一般的情况都是在使用字符串拼接的时候才会用到,因为它的速度快。

679140-20150911092957090-407036623.jpg

3:监视字符串等C#程序的快慢的方法


在需要添加监视的程序前面实例化Stopwatch对象。

Stopwatch watch=new Stopwatch();
watch.Start()
//这中间是需要看执行时间的程序
Watch.Stop();
Console.WriteLine(watch.Elapsed); 

4:弱引用


就是变量在初始化完成之后,在栈里面没有地址指向它,则它将被GC回收,此时用WeakReference重新申明一下,就是将其弱引用下,以后使用的时候直接使用就可以使用。

<WeakReference wr=new WeakReference(p)>



目录
相关文章
|
3月前
|
人工智能 运维 Java
面向对象进阶
面向对象进阶
39 0
|
11月前
|
存储 开发框架 Java
|
12月前
|
程序员 测试技术 C语言
c++面向对象程序设计入门
c++面向对象程序设计入门
139 0
|
存储 机器学习/深度学习 编译器
面向对象程序设计 C++总结笔记(1)
理解面向对象程序设计的基本原理,掌握面向对象技术的基本概念和封装性、继承性和多态性,能够具有面向对象程序设计思想。掌握C++语言面向对象的基本特性和C++语言基础知识,能够使用C++语言进行计算机工程领域复杂工程问题的表述,能够进行C++程序阅读和分析。
131 0
面向对象程序设计-第一章:面向对象程序设计基础
面向对象程序设计-第一章:面向对象程序设计基础
139 0
面向对象程序设计-第一章:面向对象程序设计基础
面向对象程序设计第三章
面向对象程序设计第三章
52 0
|
存储
面向对象程序设计第四章
面向对象程序设计第四章
100 1
面向对象程序设计第四章
面向对象程序设计-第二章
面向对象程序设计-第二章
37 0
面向对象程序设计-第二章
|
数据安全/隐私保护 C++
C++面向对象程序设计简介
C++面向对象程序设计简介
171 1
|
存储
笔记08-面向对象
笔记08-面向对象
笔记08-面向对象