面向对象

1、万物皆对象,世界是由对象组成的,为了模拟整个世界、

对象的描述从特征和行为两方面去描述。

属性——对象具有的各种特征。每个对象的每个属性都拥有特定的值。

方法——行为,动作,执行的操作。

对象是实实在在存在东西。

类:类是模子,确定对象将会拥有的特征(属性)和行为(方法)

类是对象的类型。 int a; 数据类型 变量名(对象名);

类和对象的区别:

1)、类是抽象的概念,仅仅是模板;对象是一个具体的实体。

2)、对象可以叫做类的实例(instance

3)、类不占内存,对象才占内存。

2、类的定义:

[访问修饰符] class 类名

{

成员(方法、属性);

}

最好一个类定义在一个.cs文件中,并且类名与文件名相同。

项目—右键—新建项—添加类

类中可以包含变量的定义和方法。

在我们自己写的类中,我们在写方法时,先不加static。在main方法中加static(加的话可以直接访问,不加的话通过类的实例化访问)

1、如何通过一个类产生一个对象?

通过类产生一个对象的过程叫做类的实例化。

类的实例化,使用关键字 newnew才能申请内存空间)必须调用构造方法

语法:类 实例名=new 类();|| 类 实例名; 实例名=new ();

访问类的属性:实例名.属性名

访问类的方法:实例名.方法名();

注意:1、在访问本类属性和方法时可以省略实例名

2、若属性和方法前没有static可以通过实例化后得到的实例访问

例子:Random r = new Random();

r.next(int min,int max)

访问修饰符

C#中有四个访问修饰符

public :可以在任何地方被访问

internal:只能在本项目中被访问

private:只能在本类中被访问

protected:只能在本类和子类中被访问

在类这个级别不写访问修饰符默认为internal

在类的里面方法的外面包含方法不写访问修饰符默认为private

如果在一个类中定义变量或者方法时没有写访问修饰符那么默认修饰符为private

属性(现在先等同于字段)

如果需要用户给赋值,应该限定属性的访问修饰符为private,然后通过方法来传参设置对变量赋值。

例如:private int age;

public void setAge(int setAge)

{

if(setAge>=0)

{

age=setAge;

}

else

{

age=0;

}

}

C#语言中可以有一种新的方法:

首先将属性定义为private(小写开头),然后定义一个公共变量public(大写开头)

例如:private int age;

public int Age

{

get//取值

{

return age;

}

set//检测是否合法,赋值

{//这里有个关键字,value中就是存储用户赋的那个值

if(value>=0)

{

age=value;

}

else

{

age=0;

}

}

}

定义一个变量,在这个变量中含有get/set两个方法,我们就叫做属性。取值的时候自动调用get方法,赋值的时候就自动调用set。如果合法就将值赋给私有的值,通过公共属性来保护私有变量。

什么叫属性: 通俗点说就是定义一个public的具有get/set方法的变量,这个变量是用于保护一个私有变量。

属性是为了保护与之相对应的字段的,保证对字段的读取和赋值符合要求。

允许外部访问的变量一定要声明为属性。

微软提供一种简单方法声明,VS中,将光标放在私有属性上,右键,重构,封装字段,按两下确定,可以自动生成公共属性。(快捷键Ctrl+R,E

属性分为:读写、只读、只写

读写属性:具有get/set方法的属性叫做读写属性。

只读属性:只允许读取,只有get方法,不允许写入,没有set方法。比如id号或者身份号,不允许修改。

只写属性:只有set方法的属性。这个属性只能写,不能读(只写属性用的少)

构造方法

当我们实例化一个类时,系统会自动对这个类的属性进行初始化。

数字类型初始化成0/0.0

String类型初始化成:null

Char类型初始化成:\0;

使用构造方法的好处:

1)对多个属性进行复制时,不需要重复写实例名

2)可以保证用户在new一个对象的时候必须对某一个属性进行赋值。

3)和2)类似,在创建对象时,对只读创建初始化

 

当我们定义好一个类,如果我们没有写构造方法,那么系统会自动给我们加上一个默认的无参数的构造方法。在这个构造方法中什么也不做,也看不到。

 

我们可以定义一个构造方法。

构造方法是一个特殊当方法,他的名字和类的名字相同,并且没有返回值,连void都可以省略不写,我们一旦手写一个构造方法后,系统原先默认给我们添加的那个无参数的构造方法就不会为我们添加了。

构造方法一般加public,使可以被访问。

若构造方法有参数,则用户实例化时必须传递参数。

注意:当出现变量名相同根据就近原则。

this表示当前实例(类)。

class Student

{

public Student(string name)

{

this.name=name;//this.name指当前实例中的字段,name指参数

}

string name;

}

要实例化一个类,必须调用它的构造方法。

构造方法的重载:

例如:public Student(string name,char sex,int age,int chinese,int math,int english)

{

this.name = name;

this.sex = sex;

this.age = age;

this.chinese = chinese;

this.math = math;

this.english = english;

 

}

public Student(string name, char sex, int age)

{

this.name = name;

this.sex = sex;

this.age = age;

}

构造方法总结:

构造方法用来创建对象,并且可以在构造函数中对对象进行初始化

构造函数是用来创建对象的特殊方法,方法名和类名一样,没有返回值,连void都不用

构造函数可以有参数,new对象的时候传递参数即可

如果不指定构造函数则类有一个默认的无参的构造函数

如果指定了构造函数,则不再有默认的无参构造函数,如果需要有无参的构造函数,则需要自己来写。

构造函数可以重载,也就是有多个参数不同的构造函数。

认识类图,通过构造方法以及参数

类图有三部分组成:类名、字段和属性、方法

字段和属性部分中最前面是访问修饰符。—为private+public:后面是类型。

VS中可以通过,项目右键—查看类图,可以查看项目中所有的类。

加锁的为私有的,是字段。public是属性

构造函数是实例化初始化,析构是对象死亡撤销时最后调用的方法。函数名也是和类名一样

不能在结构中定义析构函数。只能对类使用析构函数。

一个类只有一个析构函数

无法继承或重载析构函数

无法调用析构函数,它们是被自动调用的

析构函数既没有修饰符也没有参数

例如: ~Student()

{

}

当应用程序结束肯定会调用析构函数,垃圾回收时也可以用,清理内存资源,可以手动调用

参数params

refout之前讲过

数组作为参数,只传数组名

疑问: Console.WriteLine();可以传多个参数?

任何类型都可以自动转换成object类型。任何子类都可以自动转换成父类,object是任何类的父类。

当传值5个以上的时候统一调用数组的版本,数组参数之前有个params,称为可变参数。传值时将元素自动组成数组,如果为任意类型,params object[]

可变数组只能作为最后一个参数

命名空间:

namespace 名字//(不允许以数字开头)

{

//存放类

}

namespace(命名空间),用于解决类重名的问题,可以看做“类的文件夹”

如果代码和被使用的类在一个namespace(命名空间)中可以直接访问,不需要using

在不同的命名空间下的类调用有两种方法:

1)写全称 命名空间.类名

2)先using引用命名空间,再调用,可以Ctrl+.可以自动引用命名空间

命名空间可以包含命名空间(一般不这样写,可读性比较差)

.nerFramework的所有的命名空间都在system下面,所以说成为根命名空间,还包含其他命名空间,产生层次结构。

命名空间是逻辑上的,文件夹是物理上的。

常用命名空间:Threading与线程有关,Test和文本编码 data与数据库操作有关等

以上是对面向对象的一点基础和总结。

posted on 2013-01-16 15:20  刘洋.neusoft  阅读(350)  评论(0编辑  收藏  举报