----------------------
C#面向对象
面向对象
· 面向对象不是取代面向过程。
类,对象
类是抽象的,对象是具体的,“人”是类,“张三”是“人”这个类的对象。按钮是类,某个按钮就是对象。对象可以叫做类的实例。类就像int,对象是10.
字段
和某个对象相关的变量,字段就是类的状态。人这个类有姓名、年龄、身高等字段,类不占内存,对象占内存。
方法
类能够执行的动作,比如问好,吃饭等。
类的继承
类之间可以有继承关系,比如“电脑”类可以从“电器”类继承,这样的好处是“电脑”类只需要定义自己特有的字段,方法就可以,也就是只要定义内存大小,CPU型号这些字段或者弹出光驱等方法就可以。
父类、基类
电脑类是电器类的子类,反之是父类。
基类(可翻译成基业,祖宗十八代传下来的)子类到父类到更高一层。
面向对象的三个特征:封装,继承,多态。
定义类
语法:
Class 类名
{
}
与已有的类平行,建好之后在大括号中定义类的字段,方法。
类中以public为类型所写的字段,方法,和属性,在其他平行类中都可调用。
成员访问级别
字段、方法、属性都可以叫类的成员,它们都需要定义访问级别。访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。
访问级别
Public (任何地方都可以访问)
Private (默认级别,只能本类成员访问)
还有internal、protected
属性
惯用法:属性开头字母大写,字段开头字母小写。
Class person
{
Privateint age;
Publicint Age;
{
Set{age=value;} //赋值(用户赋的值)
get{return age;} //取值
}
Public void sayhello()
{
Console.writeLine(“我的年龄{0}”,age);
}
}
属性可以进行非法值的判断。
属性中可以直有set或只有get,当这种情况出现的时候就叫做只读属性。
定义属性时,可以只写
Set;
get;
因为编译器自动帮我们生成私有字段和set,get代码块。
对象的引用
int i=10
int j=i
i++
得出 j=10
Person p1=new person(10)
P2=p1
P1++
得出 p2=11
Int、datetime、bool、char等类型都属于值类型,赋值的时候是传递。
普通对象则是引用类型,赋值的时候是传递引用。
函数也是引用传递
构造函数
·构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用。
·构造函数可以有参数,new对象的时候传递函数参数即可
·构造函数可以重载,也就是有多个参数不同的构造函数
·如果不指定构造函数,则类有一个默认的无参构造函数,如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写。
作用:构造函数用来创建对象,并且可以在构造函数中对对象进行初始化。
继承
语法:
Class 类名:父类名
{
}
父类中的属性、方法,子类都可以使用,子类中也可以创建新的属性,方法。
一个类也可以有多个类,当父类中新建一个属性,这个类的所有子类都可以使用该属性。
Object类是所有类的基类。没有指定父类那么父类就是object。
异常与异常处理
·传统的错误表示方式:错误码。
错误码需要知道不同错误码的含义,如果不处理错误码,则程序可能陷入不可以预置的错误。
·错误码的缺点:不处理则很难发现,每次处理则很麻烦;难以看出错误的原因;容易使得程序进入不确定状态。
·try-catch Exception ex 异常也是对象。
·Exception类主要属性:message(错误信息)、stackTrace(异常堆栈)
·发生异常后程序就默认推退出了,try代码块中的后续代码不会被执行。Catch以后的代码则会继续执行。
·不要吃掉异常,一般情况下不需要处理异常。
·扔出自己的异常,仍:throw,抓住:catch。
常量与静态成员
常量就是不变的变量。
在方法中生命表变量,程序易读,一个地方变了所有地方都变了,当你需要这个值不做任何变化时,就把它声明成常量。
Public const 不用new一个类就可以直接调用
静态成员
不需要new的字段直接可以调用的就是静态成员。
·全局变量。Static类变量。静态变量就是全局变量。
·不用new就能用的方法:static方法,static方法其实就是普通函数。
·在static方法中可以调用其他static成员,但是不能调用非static成员。在非static方法中可以调用static成员。
·静态类,不能被new的类就是静态类。
命名空间
·namespace(命名空间)用于解决类重名的问题,可以看做“类的文件夹”
·在代码中使用其他类的时候需要using类所在的namespace。 System.collections.arraylist,快速引入的方法,右键→解析。
·如果代码和被使用的类在一个namespace则不需要using
·可以修改默认的namespace,因此不要认为在相同文件夹下就不用using,不在相同文件夹下就需要using。
索引器
·C#中提供了按照索引器进行的访问
·定义索引器的方式
Stringthis [int index]
{
Get{return””;}
Set{}
}
String为索引器的类型,[]中是参数列表。进行索引器写操作就是调用set代码块,在set内部使用value得到用户设置的值;进行读操作就执行get代码块。
·索引器参数可以不止一个,类型也不限制,几乎可以是任意类型。
----------------------ASP.Net+Android+IOS开发、