C#面向对象
C#面向对象是相对于面向过程而言的,面向过程强调的是功能行为,完成任务由多个方法完成;面向对象将功能进行封装,完成任务由对象来完成.面向对象不是取代面向过程的,而是思想的转变.过去做事情总是"亲力亲为";事事具细,现在有了成绩当老板了,把事情交给手下去做.
1.什么是类、
是一类事物的总称,一个模板;是虚构的;抽象的;不存在的.
2.什么是对象
是实实在在的个体,是类的实例化.
3.如何实例化一个对象
通过类产生对象,叫做声明一个对象;实例化一个对象。语法:类名 实例名(变量名)=new 类名();比如Person ps=new Person();,这样就完成一个对象的声明;注意=前面是声明一个对象名(变量名),后面的才是开辟一块内存空间,真正实例化了,才说明ps在计算机中实实在在存在的。当然也必须是实例化之后.通过对象名.属性名;对象名.方法名()调用类的属性和方法.注意:类不占系统内存,对象才占内存.
4.静态类的访问
有static修饰的类,不需要实例化,直接类名.属性名和类名.方法名即可访问类的属性和方法了.静态类,不能被new的类就是静态类,常用来实现函数库
5.访问修饰符
属性和方法:public代表公有的,可以在任何地方被访问;internal代表只能在本项目中被访问;protected是受保护的意思,只能在本类和子类中被访问;private指私有的,只能在本类中被访问。默认是private修饰符。
类:public代表公有,可以在任何地方被访问;protected是受保护的意思,只能在本类和子类中被访问。internal代表是只能在项目中被访问。默认是internal。
6.属性
如果在方法中定义了一个变量,这个变量有get或set方法,那么这个变量就有对应的属性,为什么是说对应的?因为变量往往是由public修饰的,来保护一个由private修饰的私有变量。这样外界只能通过属性来访问,保护了那个私有变量。 比如:private int age; public int Age { get { return age} ; set {age=value; } }。这个Age就是属性,外界可以访问Age,但无法访问age,保护了age字段。设置属性可以通过“右击字段”,然后选择“重构”,“封装字段”即可完成。Ctrl+R,E快捷键功能.属性分为读写(含get和set方法)、只读(只含get方法)和只写(只含set方法),根据实际需要来设置相应的属性即可.
7.自动属性
属性的本质就是方法;由get与set方法组成.所谓自动属性,就是只有属性没有字段,这时系统会自动为我们生成一个只有属性能访问的私有字段.此时要注意get与set方法只能成对使用;如果只有get,就没有办法赋值,同样的道理只有set;就没办法读取,单单只有get,或只有set是没有意义的.实际上这时系统会报错.
8.构造方法
语法: [访问修饰符public] 名(和类同名,没有返加值){}.
作用:创建对象实例化对象,给类的成员赋初值.
好处:<1.可以对多个属性或字段进行赋值;不需要重复写实例名<2.保证用户在创建对象时必须对指定的成员赋初值<3.可以对只读属性进行赋值.
参数:系统自动生成的;默认的构造方法是无参的,当用户自定义了构造函数;系统的默认的构造函数就会自动消失.为了保证不会出错,我们可以手动添加一个无参的方法.构造方法可以重载,就是说可以有多个参数的构造方法.
9.继承(:)
定义类时不指定父类,则父类就是Object类.Object类是任何类直接或间接的父类.继承都是单继承,只能继承自一个类.
子类继承父类的属性和方法,也可以有自己的特定属性与方法.在调用子类成员时;程序会先调用父类的构造方法给成员初始化,之后再执行子类的实例化方法.
10.索引器
定义索引器的方式:
string this[int index]{get{return "";}set{""=value;}},string为索引器的类型;[]中是参数列表,用set方法通过Value得到用户给定的值;用get方法读取值. 索引器的参数可以不止一个,类型也不限于int;几乎是任意类型.
11.Params可变参数
在方法的类型前加params参数,就成为可变参数.调用时传一个或几个相同类型的值后,这个方法会把值自动放入相同类型的数组中.
如Test( params int[] arry),但方法如果有多个相同类型参数时params所修饰的参数;必须放最后面.(如Test(int age, params int[] arry))
12.命名空间
命名空间用于解决类的重名问题;可以看做类的“文件夹”(理解的意义),被使用的类如果在同一namespce命名空间下;则不需要引入.如果不在同一命名空间下则需要引入.有以下两种方法:
<1.写全称(类名.方法名)
<2.先using引入命名空间,再调用.
13.析构函数
析构方法是用来手动清理内存资源的,不过C#中有垃圾回收器会不定时清理内存资源。
注意点:析构函数只能定义在类中,不能在结构中定义使用析构方法.一个类中只能有一个析构方法,并且不允许重载;无法继承或重载析构函数;无法调用析构函数;是自动被调用的,并且析构函数没有修饰符、参数。比如 ~类名 {} ,这就是一个析构函数。
14.字符串
1.字符串可以看做char的只读数组,遍历char数组输出字符串内容;但不能直接通过下标修改字符串内容,所以说它是只读的。
2.字符串的一个特性:不可变性.字符串一旦声明就不可改变.所以只能读取;不能通过索引直接修改.
3.间接修改:
通过ToCharArray()方法复制得到新的Char数组,修改后调用new string(char[])构造方法创建新的字符串对象.
4.string是C#中的字符串,而String是.Net Framwork中的字符串,实际上是一样的.
5.字符串常用方法
<1.Equals()比较两个字符串是否相同(==).
<2.Split()字符串分割,根据要求对字符串分割;注意Split()的第三个重载方法;第二个参string.SplitStringOptions.RempveEmptyEntries是将分割之后的数组中的空格删除掉。
<3.SubString()字符串的载取.
<4.IndexOf()返回指定字符的索引。
<5.ToLower()和ToUpper()得到字符串的小写或大写形式,注意方法也不会改变字符串原来的值,只是通过方法生成一个新的字符串.
<6.Replace()替换指定的字符
<7.Compare()比较两个字符串大小(按ascii顺序比较),返回0则相等;返回-1第一个字符串小于第二个字符串;返加1第一个字符串大于第二个字符串
<8.Contains()判断字符串是否存在,返加一个true或false.